トリガは名称を持つ、テーブルに付属するデータベース オブジェクトで、
テーブルに特定イベントが発生すると有効化されます。
ストアド・プロシジャは,必要な時に呼び出すサブルーチン的な位置付けですが、
それに対してトリガーは,テーブルのデータが更新されたときに自動的に実行する。
テーブルに対して,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. カラム名 イベント実行後のカラム値
トリガーの確認
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;
参考サイト
18.1. CREATE TRIGGER 構文
A.5. MySQL 5.1 FAQ — Triggers
21.16. INFORMATION_SCHEMA TRIGGERS テーブル
[MySQLウォッチ]第16回 MySQL 5.0ベータ版リリース,新機能トリガーとビューを試す
Pingback: variable.jp [Mainly Deals with RDBMS] » Blog Archive » MYSQL Trigger レビュー