为什么要用触发器
:
我们曾经许诺支持所有ANSI
标准的特性。
您可以使用它来检查或预防坏的数据进入数据库。
您可以改变或者取消INSERT, UPDATE
以及
DELETE
语句。
您可以在一个会话中监视数据改变的动作。
触发器的语法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
其中trigger_name
标识触发器名称,用户自行指定;
trigger_time标识触发时机,用
before
和
after
替换;
trigger_event标识触发事件,用
insert
,
update
和
delete
替换;
tbl_name标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt是触发器程序体;触发器程序可以使用
begin
和
end
作为开始和结束,中间包含多条语句;
例子:
下面是根据字段改变来存入另外一张表中简单的例子
CREATE TRIGGER user_TRIGGER after update ON user FOR EACH ROW
BEGIN
IF OLD.grade <> NEW.grade THEN
IF NEW.grade = 1 THEN
INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是普通会员
', 0, current_timestamp, 1, NEW.id);
END IF;
IF NEW.grade = 2 THEN
INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是白银会员
', 0, current_timestamp, 1, NEW.id);
END IF;
IF NEW.grade = 3 THEN
INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是金卡会员
', 0, current_timestamp, 1, NEW.id);
END IF;
IF NEW.grade = 4 THEN
INSERT INTO inform(title, introduce, admin_id, create_time, state, user_id) VALUES('用户等级变更
', '
尊敬的用户您现在是钻石会员
', 0, current_timestamp, 1, NEW.id);
END IF;
END IF;
END
上述触发器实例使用了OLD
关键字和
NEW
关键字。
OLD
和
NEW
可以引用触发器所在表的某一列
,
old是改变之前字段的值,
new
可以表示改变之后的值。
SHOW TRIGGERS from SF_User like "usermaps%";
//查看
SF_User
库上名称和
usermaps%
匹配的触发器
SHOW TRIGGERS;
//查看所有触发器
DROP TRIGGER [schema_name.]trigger_name
删除触发器