ホームページ >データベース >mysql チュートリアル >mysqlトリガーの使用例の共有
この記事では、mysql トリガーの使用例の詳細な説明に関する関連情報を主に紹介します。必要な方は参考にしていただければ幸いです。
MySQL トリガー構文の詳細な説明:
トリガーは、特定のテーブルにデータを挿入 (挿入)、削除 (delete)、または変更 (更新) するときに実行をトリガーする特別なストアド プロシージャであり、データよりも小さいです。 Standard 自体は、より高度で洗練されたデータ制御機能を備えています。トリガーはプログラムによって呼び出されるのではなく、イベントによってトリガーされます。データが変更されたときにビジネス ルールを自動的に適用します。多くの場合、データ整合性の制約とビジネス ルールを強化するために使用されます。トリガーは他のテーブルにクエリを実行し、複製された SQL ステートメントを含めることができます。トリガーを使用して参照整合性を強制することもできます。トリガーは、チェック制約で定義された制約よりも複雑な制約を強制できます。
(1).CREATE TRIGGER 構文
CREATE TRIGGERtrigger_nametrigger_timetrigger_event ON tbl_name FOR EACH ROWtrigger_stmt;
トリガーは、テーブルに関連する名前付きデータベース オブジェクトであり、テーブルで特定のイベントが発生したときにアクティブ化されます。
トリガーは tbl_name という名前のテーブルに関連しています。 tbl_name は永続テーブルを参照する必要があります。トリガーを TEMPORARY テーブルまたはビューに関連付けることはできません。
trigger_time はトリガープログラムの動作時間です。 BEFORE または AFTER で、トリガーをアクティブにするステートメントの前または後にトリガーが起動されるかどうかを示します。
trigger_event は、トリガプログラムを起動する文の種類を指定します。 trigger_event は次のいずれかの値です:
(1).INSERT: トリガーは、たとえば INSERT、LOAD DATA、REPLACE ステートメントを通じて新しい行がテーブルに挿入されるときにアクティブ化されます。
(2).UPDATE: たとえば UPDATE ステートメントを通じて、特定の行が変更されたときにトリガーをアクティブにします。
(3).DELETE: トリガーは、DELETE ステートメントや REPLACE ステートメントなどによってテーブルから行が削除されるときにアクティブになります。
トリガーでは、START TRANSACTION、
COMMIT、ROLLBACK など、トランザクションを明示的または暗黙的に開始または終了するステートメントを使用できません。
トリガーの影響を受ける行の列にアクセスするには、OLD キーワードと NEW キーワードを使用します (OLD と NEW では大文字と小文字が区別されません)。
INSERT トリガーでは NEW.col_name のみを使用でき、古い行は使用できません。 DELETE トリガーでは、OLD.col_name のみを使用でき、改行は使用できません。 UPDATE トリガーでは、OLD.col_name を使用して更新前の行の列を参照するか、NEW.col_name を使用して更新された行の列を参照できます。
OLD で名前が付けられた列は読み取り専用です。参照することはできますが、変更することはできません。 NEW という名前の列については、SELECT 権限がある場合に参照できます。 BEFORE トリガー プログラムでは、UPDATE 権限がある場合、「SET NEW.col_name = value」を使用して値を変更できます。これは、トリガーを使用して、新しい行に挿入される値を変更したり、行内の値を更新したりできることを意味します。 BEFORE トリガー プログラムでは、AUTO_INCREMENT 列の NEW 値は 0 ですが、これは新しいレコードが実際に挿入されるときに自動的に生成されるシーケンス番号ではありません。
BEGIN...END 構造体を使用すると、複数のステートメントを実行するトリガー プログラムを定義できます。 BEGIN ブロックでは、条件やループなど、ストアド サブルーチンで許可されている他の構文も使用できます。ただし、ストアド サブプログラムと同様に、複数のステートメントを実行するトリガー プログラムを定義する場合、MySQL プログラムを使用してトリガー プログラムに入る場合は、トリガー プログラム内で文字「;」を使用できるようにステートメント区切り文字を再定義する必要があります。意味。以下の例では、これらの点を説明します。この例では、各行を更新するときに使用される新しい値をチェックし、値が 0 ~ 100 の範囲内になるように値を変更する UPDATE トリガーが定義されています。行の更新に使用する前に値をチェックする必要があるため、BEFORE トリガーである必要があります:
mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;// mysql> delimiter ;
ストアド プロシージャを個別に定義し、単純な CALL ステートメント ストアド プロシージャを使用してトリガーから呼び出す方が簡単です。この方法は、複数のトリガー プログラム内から同じサブルーチンを呼び出す予定がある場合にも役立ちます。トリガー プログラムの実行中、MySQL は次のようにエラーを処理します:
(1) BEFORE トリガー プログラムが失敗した場合、対応する行の操作は実行されません。
(2) AFTER トリガーは、BEFORE トリガー (存在する場合) と行操作が正常に実行された場合にのみ実行されます。
(3) BEFORE または AFTER トリガー プログラムの実行中にエラーが発生した場合、トリガー プログラムを呼び出すステートメント全体が失敗します。
(4) トランザクション テーブルの場合、トリガーが失敗した場合 (およびその結果としてステートメント全体が失敗した場合)、ステートメントによって実行されたすべての変更がロールバックされます。非トランザクション テーブルの場合、このタイプのロールバックは実行できないため、ステートメントが失敗した場合でも、失敗前に行われた変更は引き続き有効です。
例 1:
mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
関連する推奨事項:
Mysql トリガーは、PHP プロジェクトでの情報のバックアップ、リカバリ、クリアに使用されます
以上がmysqlトリガーの使用例の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。