■ トリガー
* テーブル操作(UPDATE/INSERT/DELETE)が行われた時に
イベント駆動で実行する仕組み
■ トリガーの作成
構文
DELIMITER //
CREATE TRIGGER 【トリガー名】 【BEFORE or AFTER】 【INSERT or UPDATE or DELETE】 ON 【対象テーブル名】
FOR EACH ROW
BEGIN
-- 【この中に実行するSQLを記述】
END;
//
サンプル
DELIMITER //
CREATE TRIGGER `say_hello_after_insert` AFTER INSERT ON person
FOR EACH ROW
BEGIN
INSERT INTO customer(first_name, family_name) VALUES('Unknown', NEW.name);
END;
//
テーブル定義
CREATE TABLE `person` (
`id` CHAR(8) NOT NULL,
`name` VARCHAR(40) NULL DEFAULT NULL,
`sex` CHAR(1) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `customer` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(50) NULL DEFAULT NULL,
`family_name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8
;
動作確認用ストアド
INSERT INTO person(id, name, sex) VALUES('X0007', 'Kim', 'm');
-- 実行後 customer を確認しデータが挿入された
■ イベントの表示
SHOW TRIGGERS;
# イベントの内容を確認
-- SHOW CREATE TRIGGER 【イベント名】;
SHOW CREATE TRIGGER say_hello_after_insert;
■ トリガーの削除
構文
DROP TRIGGER IF EXISTS 【イベント名】;
サンプル
DROP TRIGGER IF EXISTS say_hello_after_insert;
■ 古い値/新しい値の参照
NEW.カラム名 ... INSERT/UPDATEで使用可能
OLD.カラム名 ... DELETE/UPDATEで使用可能