MySQL之触发器

2018-06-07  本文已影响7人  wenmingxing

本文主要介绍MySQL中触发器的相关知识与应用,为什么使用触发器,以及如何使用触发器。

I、触发器简介

如果我们想要在某个表发生更改时自动处理一些事情,就应该使用触发器,触发器是MySQL响应以下任意语句而自动执行的一条语句(位于BEGINEND之间的一组语句):
· 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 例题

牛客网SQL_触发器_例题1

【参考】
[1] 《MySQL必知必会》

上一篇下一篇

猜你喜欢

热点阅读