1. 创建触发器
触发器只能创建在永久表上,不能创建在临时表上
- 语法
1
2
3
4CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
trigger_statement
实例1
1
2
3
4
5
6
7delimiter $$
DROP TRIGGER IF EXISTS uf ;
CREATE TRIGGER uf BEFORE DELETE ON usr
FOR EACH ROW
BEGIN
INSERT INTO home (addr) VALUES('nanjing 1 road') ;
END ;实例2
1
2
3
4
5
6
7
8
9delimiter $$
DROP TRIGGER IF EXISTS uf ;
CREATE TRIGGER uf BEFORE INSERT ON usr
FOR EACH ROW
BEGIN
IF new.salary IS NULL THEN
SET new.salary = 1000;
END IF ;
END;OLD && NEW
- 对于
INSERT
只有NEW
是合法的; - 对于
DELETE
只有OLD
是合法的; - 对于
UPDATE
操作OLD
和NEW
均合法;
- 对于
FOR EACH ROW
:表示任何一条记录上的操作满足触发事件都会触发该触发器;
2. 删除触发器
命令:DROP TRIGGER trigger_name
;
3. 查看触发器
命令:SHOW TRIGGERS
;
4. 限制
- 触发程序中不能返回数据,也不能采用CALL语句的动态SQL语句;
- 在触发器中不能显示或隐式的开始或结束事务;
- 执行过程中出现任何错误将不会继续执行;
- 如果执行一个事务表,出现错误后整个被回滚;
- 如果执行一个非事务表,出现错误后已更新的记录无法被回滚;