Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb

20.3 トリガーの使用


トリガーは、関連付けられたテーブルでステートメントが行の挿入、更新、または削除を行なったときにアクティブ化するように定義されます。これらの行操作がトリガーイベントになります。たとえば、行は、INSERT または LOAD DATA ステートメントで挿入でき、挿入トリガーは挿入された行ごとにアクティブ化します。トリガーは、トリガーイベントの前または後のどちらかでアクティブ化するように設定できます。たとえば、テーブルに挿入される各行の前、または更新される各行のあとでトリガーをアクティブ化させることができます。


MySQL のトリガーは、SQL ステートメントがテーブルに対して行なった変更の場合にのみアクティブ化します。ビューでの変更や、SQL ステートメントを MySQL Server に転送しない API がテーブルに対して行なった変更ではアクティブ化しません。これは次のことを意味します。

  • INFORMATION_SCHEMA または performance_schema テーブルは実際にはビューなので、トリガーは、これらのテーブルでの変更ではアクティブ化されません。

  • トリガーは、NDB API を使用して行われた更新によってアクティブ化されません。



User Comments
  Posted by Gabe Holmes on June 20, 2009
A trigger can be used to do a real time pivot of an entity-attribute-value table. Suppose you have two tables, "eav" with columns entity, attribute, and value (entity+attribute are the primary key) and "pivot" with columns id,Author,Title,Publisher.
Here's the code:

create trigger ai_eav
after insert on eav
for each row
set @id=new.entity;
set @attribute=new.attribute;
set @value=new.value;
update pivot
Author=(select if(@attribute='Author',@value,Author)),
Title=(select if(@attribute='Title',@value,Title)),
Publisher=(select if(@attribute='Publisher',@value,Publisher))
  Posted by Andre K. on March 23, 2014
Be aware of that MySQL does foreign key checks BEFORE invoking any trigger. So it is not possible to implement a BEFORE INSERT trigger that enters up a missing column value with a foreign key constraint.
  Posted by Russell Bohlmann on July 15, 2014
Regarding a BEFORE INSERT/UPDATE TRIGGER: I have found that value TYPE checks (ie. checks for integer vs. string values) are done BEFORE the trigger is invoked but FOREIGN KEY checks are done AFTER.
Sign Up Login You must be logged in to post a comment.