MySQL では、トリガーはデータベース ディレクトリに保存されている一連の SQL ステートメントであり、挿入、更新、削除など、テーブルに関連付けられたイベントが発生するたびに実行または起動されます。トリガーはデータ テーブルと密接に関連しており、主にテーブル内のデータを保護するために使用されます。特に、特定の相互接続を持つ複数のテーブルがある場合、トリガーは異なるテーブル間でデータの一貫性を維持できます。 MySQL では、トリガーは INSERT、UPDATE、および DELETE 操作の実行時にのみアクティブ化され、他の SQL ステートメントではトリガーはアクティブ化されません。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
mysql のトリガー
mysql では、トリガーはデータベース ディレクトリに保存されている一連の SQL ステートメントです。挿入、更新、削除など、テーブルに関連付けられたイベントが発生したときに発生します。
MySQL トリガーは、ストアド プロシージャと同様、MySQL に埋め込まれたプログラムであり、MySQL でのデータ管理のための強力なツールです。違いは、ストアド プロシージャの実行には CALL ステートメントが必要であるのに対し、トリガーの実行には CALL ステートメントや手動起動は必要なく、データ テーブルに対する関連操作を通じてトリガーおよびアクティブ化され、実行が行われることです。たとえば、学生テーブルに対して操作 (INSERT、DELETE、または UPDATE) が実行されると、その実行がアクティブ化されます。
トリガーはデータ テーブルと密接に関連しており、主にテーブル内のデータを保護するために使用されます。特に相互に関連する複数のテーブルがある場合、トリガーは異なるテーブル間でデータの一貫性を維持できます。
MySQL では、INSERT、UPDATE、および DELETE 操作を実行するときにのみトリガーをアクティブにすることができます。他の SQL ステートメントではトリガーはアクティブになりません。
それでは、なぜトリガーを使用するのでしょうか?たとえば、実際にプロジェクトを開発していると、次のような状況に遭遇することがよくあります。
学生に関するレコードを学生テーブルに追加するとき、同時に学生の総数も変更する必要があります。
学生レコードを追加するときは、年齢が範囲要件を満たしているかどうかを確認する必要があります。
学生の情報を削除する場合は、スコアシート上の該当する記録を削除する必要があります。
データを削除する場合は、データベース アーカイブ テーブルにバックアップ コピーを保存する必要があります。
上記の状況で実装されるビジネス ロジックは異なりますが、いずれもデータ テーブルが変更されたときに何らかの処理を自動的に実行する必要があります。このとき、トリガー処理を利用することができます。たとえば、最初のケースでは、トリガー オブジェクトを作成し、学生レコードが追加されるたびに学生の総数を計算する操作を実行できます。これにより、学生レコードが追加されるたびに、学生の総数と学生の総数が確実に計算されます。生徒の記録の数が計算され、一貫しています。
MySQL がサポートするトリガー
実際の使用では、MySQL は INSERT トリガー、UPDATE トリガー、DELETE トリガーの 3 つのトリガーをサポートします。
1) INSERT トリガー
INSERT ステートメントの実行前または後に応答するトリガー。
INSERT トリガーを使用するときは、次の点に注意する必要があります。
INSERT トリガー コードでは、NEW という名前の仮想テーブルを参照できます (大文字と小文字は区別されません)。 ) 挿入された行にアクセスします。
BEFORE INSERT トリガーでは、NEW の値も更新できます。これにより、挿入された値を変更できます (対応する操作権限がある限り)。
AUTO_INCREMENT 列の場合、NEW には INSERT が実行される前は値 0 が含まれており、INSERT が実行された後は自動的に生成された新しい値が含まれます。
2) UPDATE トリガー
UPDATE ステートメントの実行前または後に応答するトリガー。
UPDATE トリガーを使用するときは、次の点に注意する必要があります。
UPDATE トリガー コードでは、NEW という名前の仮想テーブルを参照できます (大文字と小文字は区別されません)。 ) 更新された値にアクセスします。
UPDATE トリガー コード内では、OLD という名前の仮想テーブル (大文字と小文字は区別されません) を参照して、UPDATE ステートメントが実行される前の値にアクセスできます。
BEFORE UPDATE トリガーでは、NEW の値も更新される可能性があり、これにより、UPDATE ステートメントで使用される値を変更できます (対応する操作権限がある場合に限ります)。 。
OLD の値はすべて読み取り専用であり、更新できません。
注: テーブル自体の更新操作をトリガーするようにトリガーが設計されている場合、使用できるのは BEFORE タイプのトリガーのみであり、AFTER タイプのトリガーは許可されません。
3) DELETE トリガー
DELETE ステートメントの実行前または後に応答するトリガー。
DELETE トリガーを使用するときは、次の点に注意する必要があります。
DELETE トリガー コードでは、OLD という名前の仮想テーブルを参照できます (大文字と小文字は区別されません)。 ) 削除された行にアクセスします。
OLD の値はすべて読み取り専用であり、更新できません。
一般に、トリガーの使用中に、MySQL は次の方法でエラーを処理します。
トランザクション テーブルの場合、トリガー プログラムが失敗し、その結果のステートメント全体が失敗した場合、ステートメントによって実行されたすべての変更がロールバックされます。非トランザクション テーブルの場合、ステートメントが失敗した場合でも、そのようなロールバックは実行できません。障害が発生する前に行われた変更は引き続き有効です。
BEFORE トリガーが失敗した場合、MySQL は対応する行に対して操作を実行しません。
BEFORE または AFTER トリガー プログラムの実行中にエラーが発生した場合、トリガー プログラムを呼び出すステートメント全体が失敗します。
MySQL は、BEFORE トリガーと行操作の両方が正常に実行された場合にのみ AFTER トリガーを実行します。
[関連する推奨事項: mysql ビデオ チュートリアル ]
以上がmysqlのトリガーとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。