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

ストアド・プロシジャは,必要な時に呼び出すサブルーチン的な位置付けですが、
それに対してトリガーは,テーブルのデータが更新されたときに自動的に実行する。
テーブルに対して,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ベータ版リリース,新機能トリガーとビューを試す

Post Navigation