1つのテーブルには最大6つのトリガーを作成する事が出来ます。
内訳は、INSERT,UPDATE,DELETEにBEFORE,AFTERの2つずつ作成する事が出来ます。

BEFORE INSERT ON table_name
AFTER INSERT ON table_name
BEFORE UPDATE ON table_name
AFTER UPDATE ON table_name
BEFORE DELETE ON table_name
AFTER DELETE ON table_name

BEFORE UPDATEトリガー


DELIMITER //
CREATE TRIGGER dbcomp_before_update_log
BEFORE UPDATE ON dbcomp FOR EACH ROW
BEGIN
INSERT INTO dbcomp_update_log( new_name, old_name )
VALUES ( NEW.name, OLD.name );
-- NEW.nameは更新後、OLD.nameは更新前の値を表す
END//
DELIMITER ;

trigger_review

mysql> update dbcomp set name = '5.1.40-log';
を実行すると以下のトリガーが実行されて値が自動更新される。

INSERT INTO dbcomp_update_log( new_name, old_name )
VALUES ( NEW.name, OLD.name );
-- NEW.nameは更新後、OLD.nameは更新前の値を表す

trigger_review_action

mysql> update dbcomp set name = '5.4.0';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from dbcomp;
+——-+
| name |
+——-+
| 5.4.0 |
+——-+
1 row in set (0.00 sec)

mysql> select * from dbcomp_update_log;
+————+————+
| old_name | new_name |
+————+————+
| MySQL | 5.1.40-log |
| 5.1.40-log | 5.4.0 |
+————+————+
2 rows in set (0.00 sec)

mysql>

INSERTによって起動されたトリガではNEWのみが有効で、それがDELETEであればOLDのみが有効になる。
たとえば前の例でデータ追加・削除時の状況も記録できるようにするには、以下のトリガを追加する。


DELIMITER //
-- データ追加時に起動されるトリガ
CREATE TRIGGER dbcomp_before_insert_log BEFORE INSERT ON dbcomp FOR EACH ROW
BEGIN
INSERT INTO dbcomp_update_log( new_name )
VALUES ( NEW.name );
END//

BEFORE INSERT
before_insert


-- データ削除時に起動されるトリガ
CREATE TRIGGER dbcomp_before_delete_log BEFORE DELETE ON dbcomp FOR EACH ROW
BEGIN
INSERT INTO dbcomp_update_log( old_name )
VALUES ( OLD.name );
END//

BEFORE DELETE
trigger_before_delete

————————————————————————————————–
トリガの処理においては、その起動の対象となったテーブルに対して
INSERT / UPDATE / DELETEを実行することはできないのだが、唯一の例外がある。
それは、BEFORE INSERTもしくはBEFORE UPDATEのトリガにおいて、
NEW.nameのような、これから追加・更新しようとする値だけはトリガ内で変更できる
————————————————————————————————–

トリガを削除するには、以下のようなDROP TRIGGER構文を実行する。
スキーマ名称およびトリガ名称はCREATE TRIGGERで設定済みのものでなければならない。
ただしIF EXISTSを付けた場合は、存在しないトリガを指定してもエラーではなくwarningとなる。

DROP TRIGGER [IF EXISTS] [スキーマ名称.]トリガ名称;

トリガーの確認
show triggers from データベース\G

show-_triggers_from_db

show create trigger dbcomp_before_delete_log
show_create_trigger


SELECT * FROM information_schema.triggers
where action_timing = 'BEFORE' AND event_manipulation = 'DELETE' \G

information_schema_triggers

MYSQL Triggers
[MySQL] MySQLのトリガとイベントスケジューラ


トリガは名称を持つ、テーブルに付属するデータベース オブジェクトで、
テーブルに特定イベントが発生すると有効化されます。

ストアド・プロシジャは,必要な時に呼び出すサブルーチン的な位置付けですが、
それに対してトリガーは,テーブルのデータが更新されたときに自動的に実行する。
テーブルに対して,INSERT,DELETE,UPDATEの各ステートメントが実行される際に,
指定した処理を自動実行する。

1つのテーブルには最大6つのトリガーを作成する事が出来ます。
内訳は、INSERT,UPDATE,DELETEにBEFORE,AFTERの2つずつ作成する事が出来ます。

BEFORE INSERT ON table_name
AFTER INSERT ON table_name
BEFORE UPDATE ON table_name
AFTER UPDATE ON table_name
BEFORE DELETE ON table_name
AFTER DELETE ON table_name

    トリガーを利用してTAXを自動計算してくれるテーブルを作成してみました。


CREATE TABLE `TAX` (
`id` int(11) NOT NULL DEFAULT '0',
`price` decimal(9,2) DEFAULT NULL,
`price_with_tax` decimal(9,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TRIGGER ins_sum AFTER INSERT ON TAX
FOR EACH ROW SET @sum = (0.05 * NEW.price) + NEW.price;

insert into TAX(id,price,price_with_tax) values(1,100,@sum);

エイリアス OLD とエイリアス NEW を使う事によって、問題のテーブル(トリガに添付されたテーブル)
中のカラムを参照する事ができます。OLD.col_name は既存の行の
カラムが更新または削除される前にチェックします。 
NEW.col_name挿入すべき新しい行あるいは
更新された既存の行のカラムを参照します。

OLD. カラム名 イベント実行前のカラム値
NEW. カラム名 イベント実行後のカラム値

trigger

トリガーの確認

SELECT TRIGGER_NAME, EVENT_MANIPULATION,
EVENT_OBJECT_TABLE, ACTION_STATEMENT
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA='dbname';

show triggers;

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;

tax

参考サイト
18.1. CREATE TRIGGER 構文
A.5. MySQL 5.1 FAQ — Triggers

21.16. INFORMATION_SCHEMA TRIGGERS テーブル

[MySQLウォッチ]第16回 MySQL 5.0ベータ版リリース,新機能トリガーとビューを試す