ホームページ  >  記事  >  データベース  >  mysqlトリガーの書き方

mysqlトリガーの書き方

(*-*)浩
(*-*)浩オリジナル
2019-05-17 11:08:5616903ブラウズ

トリガーは、MySQL データ テーブルに関連するデータベース オブジェクトであり、定義された条件が満たされるとトリガーされ、トリガーで定義された一連のステートメントを実行します。トリガーのこの機能は、アプリケーションがデータベース側でデータの整合性を確保するのに役立ちます。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。