1. 触发器
表中的某条记录修改后,可能导致一系列数据都要被修改,在SQL语句层面上则表现为执行了某条SQL语句后要接着执行一系列语句。例如:当学生表里的一个学生记录被删除,则班级表里对应班级的人数要减一。
触发器常用于上述情况,触发器为表绑定一系列语句,当表中记录发送该变时则触发触发器,自动执行相应语句。
2. 创建触发器
创建触发器需要指明对哪个表进行了什么操作 在这之前或之后 执行设定好的一系列语句
#创建触发器
create trigger 触发器名 before|after insert|update|delete on 表名 for each row 执行语句;
create trigger 触发器名 before|after insert|update|delete on 表名 for each row begin
执行语句1;
执行语句2;
...
end;
- 执行语句
执行语句中常常需要加上条件,且一般是和表名
对应的表有关,这时条件里不能出现表名
,而需要用NEW
或OLD
代替;
insert操作,则用new;delete操作,则用old;update操作,new或old都行; - 例子
有一班级表一学生表;
创建触发器;
create trigger tri_insert_student after insert on student for each row update class set student_count = student_count+1 where class.id = new.class_id;
对学生表插入新值,班级表学生人数列自动加1;
3. 查看和删除触发器
#查看触发器
show triggers;
#删除触发器
drop trigger 触发器名;
4. 注意事项
- 触发器创建
创建触发器时,不能有同名触发器;
两个触发器,触发条件不能相同,即不能是对同一表的相同操作以及相同时间; - 分隔符
当要触发多条语句时,在begin、end之间插入多条SQL语句,SQL语句之间以;
作为分隔符;
在MySQL中同时使用;
作为命令的结束符,因此会产生冲突,可以使用DELIMITER $$
将结束符设置为$$;
DELIMITER $$ #改变结束符
create trigger 触发器名 before|after insert|update|delete on 表名 for each row begin
执行语句1;
执行语句2;
...
end
$$
DELIMITER ; #恢复结束符