MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLトリガーでOLD・NEWキーワードを使って行の列値にアクセスする方法

MySQLのトリガー定義では、挿入・更新・削除の対象となる行の列値を参照できます。このとき活躍するのがOLDキーワードとNEWキーワードです。それぞれ次のような役割を持っています。

  • OLD:元の行(変更前)の値を参照したい場合は、列名の前に「OLD」という修飾子を付けます。

  • NEW:新しい行(変更後)の値を参照したい場合は、列名の前に「NEW」という修飾子を付けます。

トリガーイベントごとの使用可否

OLDとNEWは、トリガーイベントの種類によって使用できるかどうかが決まります。誤って使うとエラーになるため、以下のルールを必ず押さえておきましょう。

  • INSERTトリガー:NEW.column_name は新しく挿入される行の列値を示します。挿入前の行は存在しないため、OLDは使用できません。

  • DELETEトリガー:OLD.column_name は削除される行の列値を示します。削除後に新しい行は存在しないため、NEWは使用できません。

  • UPDATEトリガー:OLD.column_name は更新前の列値を、NEW.column_name は更新後の列値をそれぞれ参照します。両方のキーワードが使用可能です。

まとめると、OLDは読み取り専用として扱わなければならないのに対し、NEWは列値の読み取りだけでなく変更も可能です。この特性を利用すると、BEFOREトリガー内で不正な値を自動的に修正するといった処理も実現できます。

OLDキーワードの使用例(DELETEトリガー)

次の例は、レコードが削除された際に、その内容をアーカイブテーブルへ自動的に記録するDELETEトリガーです。OLDを使って削除対象行のidを取得しています。

mysql> CREATE TRIGGER studentinfo_after_delete
-> AFTER DELETE
-> ON student_info
-> FOR EACH ROW
-> BEGIN
-> DECLARE vuser varchar(30);
-> SELECT USER() INTO vuser;
-> INSERT INTO student_info_deleted(id,deleted_date,deleted_by)
-> VALUES(OLD.id,SYSDATE(),vuser);
-> END //
Query OK, 0 rows affected (0.25 sec)

このトリガーでは、student_infoテーブルから行が削除されると同時に、削除された行のid(OLD.id)、削除日時、実行ユーザーがstudent_info_deletedテーブルに記録されます。監査ログや履歴管理に役立つ典型的なパターンです。

NEWキーワードの使用例(INSERTトリガー)

次の例は、挿入前にデータを検証し、負の年齢が登録されそうになった場合に自動的に0へ補正するBEFORE INSERTトリガーです。NEWを使って挿入予定の値を読み書きしています。

mysql> CREATE TRIGGER before_insert_studentage BEFORE INSERT ON
student_age FOR EACH ROW
BEGIN
IF NEW.age < 0 THEN SET NEW.age = 0;
END IF;
END //
Query OK, 0 rows affected (0.30 sec)

このようにNEWは代入先としても使えるため、データベースへの登録前に値をサニタイズ(無効値の補正)するバリデーション処理に最適です。

ポイントまとめ

  • OLD=変更前の行、NEW=変更後の行の列値を参照する。

  • INSERTトリガーではNEWのみ、DELETEトリガーではOLDのみ使用可能。

  • UPDATEトリガーでは両方使用でき、更新前後の比較にも活用できる。

  • OLDは読み取り専用、NEWは読み書き可能。

  1. Windows 11で音声アクセス(Voice Access)を有効にする方法を徹底解説

    「音声アクセス(Voice Access)」は、Windows 11に搭載された注目の新機能です。その名の通り、声だけでパソコンのほぼすべての操作をコントロールできます。近年、音声操作が急速に普及していることを考えると、Microsoftがこの機能を搭載しなかったらむしろ不思議なくらいでしょう。本記事では、Windows 11で音声アクセスを有効にする具体的な手順をわかりやすく解説していきます。Windows 11で音声アクセスを有効にする手順2021年12月に導入された音声アクセスは、アプリの起動やメールの読み書き、アプリ間の切り替えまで、幅広い操作を音声でサポートしてくれます。なお、音声ア

  2. 新しい Microsoft Edge で Internet Explorer モードを有効にして使用する方法

    Microsoftの新しいEdgeブラウザは、刷新されたユーザーインターフェース、高速なパフォーマンス、拡張機能サポートの向上など、多くの魅力を備えています。しかし、企業やビジネス環境で利用している方にとって、もう一つ見逃せない機能があります。それが「Internet Explorerモード」です。 新しいMicrosoft EdgeのInternet Explorerモード(IEモード)を使えば、最新のレンダリングエンジンとレガシーサイト向けの互換性を組み合わせた、シンプルで快適なブラウジング体験が得られます。IEモードでは、最新サイトには統合されたChromiumエンジンを使用し、Trid