トリガーは、MySQL データ テーブルに関連するデータベース オブジェクトであり、定義された条件が満たされるとトリガーされ、トリガーで定義された一連のステートメントを実行します。トリガーのこの機能は、アプリケーションがデータベース側でデータの整合性を確保するのに役立ちます。
構文形式は次のとおりです。
CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> FOR EACH Row<触发器主体>
構文の説明は次のとおりです。
1) トリガー名
トリガーの名前。トリガーには、現在のデータベース内で一意の名前が必要です。特定のデータベースに作成する場合は、名前の前にデータベースの名前を付ける必要があります。
2) INSERT | UPDATE | DELETE
トリガー イベント。トリガーをアクティブにするステートメントのタイプを指定するために使用されます。
注: 3 つのトリガーの実行時間は次のとおりです。 INSERT: 新しい行がテーブルに挿入されるとトリガーがアクティブになります。たとえば、INSERT の BEFORE トリガーは、MySQL の INSERT ステートメントだけでなく、LOAD DATA ステートメントによってもアクティブ化できます。 DELETE: DELETE ステートメントや REPLACE ステートメントなど、テーブルからデータ行が削除されるときにトリガーがアクティブになります。 UPDATE: UPDATE ステートメントなど、テーブル内のデータ行が変更されたときにトリガーがアクティブになります。
3) BEFORE | AFTER
BEFORE および AFTER (トリガーが起動される瞬間) は、トリガーがそれをアクティブにするステートメントの前または後に起動されることを示します。新しいデータが条件を満たしていることを確認する場合は、BEFORE オプションを使用します。トリガーをアクティブにするステートメントの実行後に複数の変更を完了する場合は、通常、AFTER オプションを使用します。
4) テーブル名
トリガーに関連付けられたテーブル名。このテーブルは永続テーブルである必要があります。トリガーを一時テーブルまたはビューに関連付けることはできません。テーブル上でトリガー イベントが発生すると、トリガーがアクティブになります。同じテーブルに、同じ起動時間とイベントを持つ 2 つのトリガーを含めることはできません。たとえば、データ テーブルの場合、同時に 2 つの BEFORE UPDATE トリガーを使用することはできませんが、BEFORE UPDATE トリガーと BEFORE INSERT トリガー、または BEFORE UPDATE トリガーと AFTER UPDATE トリガーを使用することはできます。
5) トリガー本体
トリガー アクション本体には、トリガーがアクティブ化されたときに実行される MySQL ステートメントが含まれます。複数のステートメントを実行する場合は、BEGIN…END 複合ステートメント構造を使用できます。
6) FOR EACH ROW
通常、行レベルのトリガーを指し、トリガー イベントの影響を受ける行ごとにトリガー アクションをアクティブにする必要があります。たとえば、INSERT ステートメントを使用して複数のデータ行をテーブルに挿入する場合、トリガーは、挿入されたデータの各行に対応するトリガー アクションを実行します。
注: 各テーブルは INSERT、UPDATE、DELETE の BEFORE と AFTER をサポートするため、各テーブルは最大 6 つのトリガーをサポートします。テーブルごとのイベントごとに一度に許可されるトリガーは 1 つだけです。単一のトリガーを複数のイベントまたは複数のテーブルに関連付けることはできません。
さらに、MySQL では、データベース内の既存のトリガーを表示する必要がある場合、SHOW TRIGGERS ステートメントを使用できます。
例:
BEGIN IF new.state in ('2','3') then INSERT INTO `userservice`.`ehome_us_green_examine` (modifydate,modifyuser,brancCode,stateDescription,state, userID,fromSystemkey,applydate,makeHospitalName,illnessName, userName,rightsholderName,tranno) VALUES ( sysdate(), 'manage', old.brancCode, old.stateDescription, new.state, '', old.fromSystemkey, old.applydate,old.makeHospitalName,old.illnessName, old.userName,old.rightsholderName, old.tranno); END IF; END
このトリガーは比較的単純です。
1、BEGIN から END、その間にデータベースがあります。 Operation
2. IF と END の間 IF は判断であり、正しいと思うことが if です。 。 。 ('2','3') の
3. new.state の意味は、テーブルのフィールドの状態が (2 または 3) の場合
4. 以下を実行します。 insert ステートメント、new は新しい値、old は元の値です (たとえば、old.userName はこのフィールドの元の値です)
5. トリガーの状態が一致している場合、トリガー全体が現地語に翻訳されます。 table 2 または 3 になったら、次の挿入文を実行します。
注: トリガーは状態変化の前に発生しますか、後ですか?名前が示すように、前または後を選択してください。
以上がmysqlトリガーの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。