概述
触发器(trigger)是一种特殊的存储过程,器特殊性在于它并不需要用户直接来调用,而是在对其指定的表进行添加、修改、删除操作之前或者之后自动执行的额外存储过程。
特点:
-
与表相关联
触发器是定义在特定表上的,这个表就可以称做为触发器表。 -
自动激活触发器
当对表中的数据执行INSERT、UPDATE、或DELETE操作的时候,如果对表上的这个特定操作定义了触发器,该触发器自动执行,这也是不可撤销的。 -
不能直接调用
与存储过程不同,触发器是不能被直接调用,也不能传递或接受参数。 -
它是作为事务的一部分
触发器与激活触发器的语句是一起作为对一个单一的事务来对待的,就相对于将两个语句完全的合二为一,相应的也就可以从触发器中的任何位置都可以进行回滚。
定义一个触发器
语法规则
DELIMITER $$
CREATE
TRIGGER 触发器名称 触发时机 触发事件
ON `数据库名`.`<表名>`
FOR EACH ROW -- 行级触发
BEGIN
执行语句;
END$$
DELIMITER ;
语法解析:
- 触发器名称:是用来标识触发器的,由用户自定义;
- 触发时机: 其值是BEFORE或AFTER;
● BEFOR:验证新数据是否满足条件使用这个;
● AFTER:激活触发器的语句执行之后完成几个或更多的改变。
- 触发事件:其值是INSERT、UPDATE和DELETE;
● INSERT:将新行插入表时激活触发器。例如:INSERT的BEFORE触发器不仅能被MySQL的INSERT语句激活,也能被LOAD DATA语句激活
● UPDATE:更改表中某一行数据时激活触发器,例如:UPDATE语句。
● DEFAULE:从表中删除某一行数据时激活触发器,例如DELETE和REPLACE语句。
- 表名称:标识建立触发器的表名,即在那张表上建立触发器。
- 执行语句: 是触发器的程序体,触发器程序可以使用BEGIN和AFTER作为开始或结束,中间包含多条语句;
实例说明:
先创建两张表
student表:
grade表:
student表中的gId连接着grade表中id列。
直接删除grade表中的数据时:
DELETE FROM grade WHERE id = 1;
它就会报错:
当我们想删除grade表中的数据时候,直接删除是不能的,首相是要将它关联表中引用它的行先删除了,才能删除grade表中的数据。
在这里我们就可以加入触发器,在删grade表数据的时候,先将student表中引用grade表对应的数据删除。
在这里我们就加入触发器:
DELIMITER $$
CREATE
TRIGGER `demo1`
BEFORE DELETE
ON `grade` -- 意为对grade表进行删除操作之前进行这个操作
FOR EACH ROW -- 行级触发(操作多行的时候,每行都会触发触发器)
BEGIN
DELETE FROM student WHERE gId = old.id;
END$$
DELIMITER ;
虽然在触发器中不能传递或接受参数,但在行级触发器代码中,可以使用 old 和 new 访问到该行的旧数据和新数据。
old 和 new 则对应表的行记录类型变量。
再次执行删除grade表的SQL操作。
DELETE FROM grade WHERE id = 1;
就会发现执行成功:
再看student表,就会发现将这个表中gId等于1的数据也删除了,虽然我们个人没有进行操作,但触发器对其进行了操作。
剩下的增加和修改和这个同理。
最后
以上就是缓慢棉花糖为你收集整理的MySQL中的触发器定义一个触发器的全部内容,希望文章能够帮你解决MySQL中的触发器定义一个触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复