触发器就是某个表发生更改时的自动处理,和python中的装饰器模式相似。
触发器是MySQL响应以下语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):
- INSERT
- DELETE
- UPDATE
其他MySQL语句不支持触发器。
创建触发器
mysql> DELIMITER //
mysql> CREATE TRIGGER sBack AFTER INSERT ON student
-> FOR EACH ROW
-> BEGIN
-> INSERT INTO backUp VALUES(NEW.no,NEW.name);
-> END//
mysql>DELIMITER ;
mysql> INSERT INTO student VALUES(2012004,"letMe",60);
mysql> SELECT * FROM backUp;
+---------+-------+
| no | name |
+---------+-------+
| 2012004 | letMe |
+---------+-------+
在每次插入到student中新的记录之后,都会往backUp表中插入相应数据的no和name。
INSERT触发器
- 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行。
- 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)
- 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成的值。
DELETE触发器
- 在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,访问被删除的行
- OLD表中的值全是只读的,不能更新。
UPDATE触发器
- 在UPDATE触发器代码中,可以引用一个名为OLD的虚拟表访问之前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问更新的值。
- 在BEFORE UPDATE触发器中,NEW 中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
- OLD中的值全都是只读的,不能更新。