加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

什么是触发器?MySQL触发器概念及其应用解析

发布时间:2022-10-18 15:02:16 所属栏目:MySql教程 来源:网络
导读: 什么是触发器?
触发器的优点 触发器自动执行。当对表进行INSERT、 UPDATE以及DELETE操作,试图修改表中的数据时,相应操作的触发器立即自动执行。触发器可以通过数据库中相关表进行层叠更

什么是触发器?

触发器的优点 触发器自动执行。当对表进行INSERT、 UPDATE以及DELETE操作,试图修改表中的数据时,相应操作的触发器立即自动执行。触发器可以通过数据库中相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理。触发器可以实现表的约束实现不了的复杂约束。在触发器可以引用其他表的列,从而实现多个表之间数据的约束。触发器可以维护冗余数据,实现外键级联选项等。

创建触发器

CREATE TRIGGER触发器名
AFTER/ BEFORE INSERT/UPDATE/DELETE
ON表名
FOR EACH ROW
BEGIN .
SQL语句;#触发程序.
END;

需要注意的是:

触发器是数据库对象,因此创建触发器时,需要指定该触发器属于哪一个数据库。触发器是在表上创建的。这个表必须是基表,不能是临时表,也不能是视图。MySQL的触发事件有三种: INSERT、UPDATE及DELETE。

INSERT:将新记录插入表时激活触发程序。

UPDATE:更改表中的记录时激活触发程序。

DELETE:从表中删除记录叶激活触发程序。触发器的触发时间有两种:BEFORE和AFTER。

BEFORE表示在触发事件发生之前执行触发程序,AFTER表示在触发事件发生之后执行触发程序。FOR EACH ROW表示行级触发器。

目前,MySQL仅支持行级触发器,不支持语句级别的触发器。FOR EACH ROW表示INSERT、UPDATE及DELETE操作影响的每一条记录都会执行一次触发程序触发程序中的SELECT语句不能产生结果集。触发程序中可以使用old关键字与new关键字。

①当向表中插入新记录时,在触发程序中可以使用new关键字表示新记录。当需要访问新记录中的某个字段时,可以使用“new. 字段名”进行访问。

②当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录。当需要访问旧记录中的某个字段时,可以使用“old. 字段名”进行访问。

③当修改表中的某条记录时,在触发程序中可以使用new关键字表示修改后的记录。使用old关键字表示修改前的记录。当需要访问修改后的记录中的某个字段时,可以使用“new. 字段名”进行访问。当需要访问旧记录中的某个字段时,可以使用“old. 字段名”进行访问。

④old记录是只读的,在触发程序中只能引用它,但不能更改它。在BEFORE触发程序中,可使用“SET new. 字段名=值”更改new记录的值。但在AFTER触发程序中,不能使用“SET new. 字段名=值”更改new记录的值。

⑤对于INSERT操作,只有new是合法的。对于DELETE操作,只有old是合法的。对于UPDATE操作,new和old都是合法的。 触发器应用 一、使用触发器实现外键级联选项

对于InnoDB存储引擎的表,由于支持外键约束关系,在定义外键约束时,通过设置外键级联选项CASCADE、SET NULL或者NO ACTION (RESTRICT),外键约束关系可以交由InnoDB存储引擎自动维护。外键级联选项CASCADE、SET NULL或者NO ACTION(RESTRICT) 含义如下:

CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新子表 中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都被 InnoDB所支持。

SETNULL:从父表中删除或更新对应的行,同时将子表中的外键列设 为空。注意,这些在外键列没有被设为NOT NULL时才有效。 ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB 所支持。

NO ACTION: InnoDB拒绝删除或者更新父表。

RESTRICT: 拒绝删除或者更新父表。指定RESTRICT (或者NO ACTION) 和 忽略ON DELETE或者0N UPDATE选项的效果是一样的。

对于InnoDB存储引擎的表之间存在外键约束关系但不存在级联选项;或者使用的数据库表为MyISAM(MyISAM表不支持外键约束关系),此时可以使用触发器来实现外键约束之间的级联选项。

二、查看触发器的定义 使用SHOW TRIGGERS命令查看触发器的定义。 使用“SHOW TRIGGERS\G" 命令可以查看当前数据库中所有触发器的信息。使用“SHOW TRIGGER LIKE模式\G"命令查看与模式模糊匹配的触发器的信息。使用SHOW CREATE TRIGGER命 令查看触发器的定义。

使用“SHOW CREATE TRIGGER 触发器名”命令可以查看指定名称

的触发器的定义。通过查询information_ schema数据库中的triggers表,可以查看触发器的定义。

MySQL中所有触发器的定义都存放在informat ion_ _schema数据库里的triggers表中,查询triggers表时,可以查看所有数据库中所有触发器的详细信息mysql触发器,查询语句如下:

SELECT * FROM information_ schema. triggers \G

删除触发器

如果某个触发器不再使用,可以使用DROPTR. IGGER语句将其删除。DROP TR IGGER语句语法如下:

DROP TRIGGER触发器名;

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!