MySQL数据库——触发器

触发器的定义

触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 , 若任何用户对表的增、删、改操作均由服务器自动激活相应的语句块。

触发器类似于火灾报警装置,即若报警装置检测到火灾则立即报警;换成触发器即为:若触发器检测到用户对某张表进行相关操作时,触发器则立即执行对应的提前设置好的命令。

触发器的定义

CREATE TRIGGER name /*触发器名*/
[AFTER|BEFORE] [DELETE|INSERT|UPDATE]  ON 表名
FOR EACH ROW   #这句话在mysql是固定的  
BEGIN  
     -- 触发器动作 --
END;

注:[AFTER|BEFORE]是指触发时序,[DELETE|INSERT|UPDATE]是触发条件。

  1. AFTER 之后触发,即是指触发器监视的触发事件执行之后。
  2. BEFORE之前触发,即是指触发器监视的触发事件执行之前。
NEW和OLD
  • NEW:修饰符用来访问操作完成列后的值。
  • OLD:修饰符用来访问操作完成前列的值。
  • 用法:修饰符.列名

特性

INSERT

UPDATE

DELETE

NEW

有效

有效

NULL

OLD

NULL

有效

有效

样例

若当前有两张表:学生表(students)和成绩表(scores),其中学生表主键为学号(sid),且 sid 为成绩表的外键,详细如下:

mysql 触发器 dbms打印 mysql触发器代码_数据库


mysql 触发器 dbms打印 mysql触发器代码_修饰符_02

若我们要在学生表(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';