本文主要介绍MySQL中触发器的相关知识与应用,为什么使用触发器,以及如何使用触发器。
I、触发器简介
如果我们想要在某个表发生更改时自动处理一些事情,就应该使用触发器,触发器是MySQL响应以下任意语句而自动执行的一条语句(位于BEGIN
与END
之间的一组语句):
· DELETE
;
· INSERT
;
· UPDATE
;
其他语句不能触发触发器。
II、创建触发器
1、在创建触发器的时候,需要给出如下信息:
· 触发器名;
· 触发器关联的表;
· 触发器应该响应的活动(三条语句);
· 触发器何时执行(处理之前或之后);
2、使用CREAT TRIGGER
语句创建触发器:
# CREATE TRIGGER
> CREATE TRIGGER newproduct AFTER INSERT ON test
FOR EACH ROW SELECT 'Product added';
上面例子中触发器的作用是:对每个插入的行显式一次'Product added'.
III、删除触发器
# DROP TRIGGER
> DROP TRIGGER newproduct
IV、使用触发器
4.1 INSERT触发器
1、在INSERT触发器代码内,可以引用一个名为NEW的虚拟表,访问被插入的行;
2、在BEFORE INSERT
触发器中,NEW中的值也可以被更新(允许更改被插入的值);
3、对于AUTO_INCREMENT
列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
下面举一个例子:
# CREATE TRIGGER
> CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
触发器neworder从NEW.order_num取得这个值并返回它。
# INSERT
> INSERT INTO order VALUES(Now(), 10001);
4.2 DELETE触发器
1、在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,访问被删除的行;
2、OLD中的值都是只读的,不能更新;
4.3 UPDATE触发器
1、在UPDATE触发器代码中,可以引用一个OLD虚拟表访问以前的值,引用一个名为NEW的虚拟表访问更新的值;
2、在BEFORE UPDATE触发器中,NEW中的值可能也被更新;
3、OLD虚拟表中的值都是只读的,不能更新;
4.4 例题
【参考】
[1] 《MySQL必知必会》
网友评论