MySQL数据库——触发器
触发器的定义
触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 , 若任何用户对表的增、删、改操作均由服务器自动激活相应的语句块。
触发器类似于火灾报警装置,即若报警装置检测到火灾则立即报警;换成触发器即为:若触发器检测到用户对某张表进行相关操作时,触发器则立即执行对应的提前设置好的命令。
触发器的定义
CREATE TRIGGER name /*触发器名*/
[AFTER|BEFORE] [DELETE|INSERT|UPDATE] ON 表名
FOR EACH ROW #这句话在mysql是固定的
BEGIN
-- 触发器动作 --
END;
注:[AFTER|BEFORE]
是指触发时序,[DELETE|INSERT|UPDATE]
是触发条件。
-
AFTER
之后触发,即是指触发器监视的触发事件执行之后。 -
BEFORE
之前触发,即是指触发器监视的触发事件执行之前。
NEW和OLD
-
NEW
:修饰符用来访问操作完成列后的值。 -
OLD
:修饰符用来访问操作完成前列的值。 - 用法:修饰符.列名
特性 | INSERT | UPDATE | DELETE |
NEW | 有效 | 有效 | NULL |
OLD | NULL | 有效 | 有效 |
样例
若当前有两张表:学生表(students)和成绩表(scores),其中学生表主键为学号(sid),且 sid 为成绩表的外键,详细如下:
若我们要在学生表(students)中删除一条信息,则对应成绩表(scores)中该学生的信息也留之无用也要对应删除,这是我们就可以设置一个删除触发器del_1
。
因为我们是在学生表(students)操作触发,所有我在学生表(students)上创建,同时是我们在做删除动作时触发的所以要选用触发条件为delete
;同时为防止在删除该学生信息时由外键引发一些错误,所以我们选用BEFORE
之前触发。即具体代码如下:
CREATE TRIGGER 'del_1'
BEFORE DELETE ON 'students'
FOR EACH ROW
BEGIN
delete from 'scores' where sid=old.sid;
END;
删除触发器
使用DROP TRIGGER语句可以删除MySQL中定义的触发器,基本语法形式如下:
DROP TRIGGER 触发器名 ON 表名;
-- 例:删除我们刚创建的触发器 del_1
DROP TRIGGER 'del_1' ON 'students';