我是靠谱客的博主 缓慢棉花糖,最近开发中收集的这篇文章主要介绍MySQL中的触发器定义一个触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

触发器(trigger)是一种特殊的存储过程,器特殊性在于它并不需要用户直接来调用,而是在对其指定的表进行添加、修改、删除操作之前或者之后自动执行的额外存储过程。
在这里插入图片描述

特点:

  1. 与表相关联
    触发器是定义在特定表上的,这个表就可以称做为触发器表。

  2. 自动激活触发器
    当对表中的数据执行INSERT、UPDATE、或DELETE操作的时候,如果对表上的这个特定操作定义了触发器,该触发器自动执行,这也是不可撤销的。

  3. 不能直接调用
    与存储过程不同,触发器是不能被直接调用,也不能传递或接受参数。

  4. 它是作为事务的一部分
    触发器与激活触发器的语句是一起作为对一个单一的事务来对待的,就相对于将两个语句完全的合二为一,相应的也就可以从触发器中的任何位置都可以进行回滚。

定义一个触发器

语法规则

DELIMITER $$

CREATE
    TRIGGER 触发器名称 触发时机 触发事件
    ON `数据库名`.`<表名>`
    FOR EACH ROW   -- 行级触发
    BEGIN
			执行语句;
    END$$

DELIMITER ;

语法解析:

  1. 触发器名称:是用来标识触发器的,由用户自定义;
  2. 触发时机: 其值是BEFORE或AFTER;

● BEFOR:验证新数据是否满足条件使用这个;

● AFTER:激活触发器的语句执行之后完成几个或更多的改变。

  1. 触发事件:其值是INSERT、UPDATE和DELETE;

● INSERT:将新行插入表时激活触发器。例如:INSERT的BEFORE触发器不仅能被MySQL的INSERT语句激活,也能被LOAD DATA语句激活

● UPDATE:更改表中某一行数据时激活触发器,例如:UPDATE语句。

● DEFAULE:从表中删除某一行数据时激活触发器,例如DELETE和REPLACE语句。

  1. 表名称:标识建立触发器的表名,即在那张表上建立触发器。
  2. 执行语句: 是触发器的程序体,触发器程序可以使用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中的触发器定义一个触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部