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

您所在的位置:网站首页 触发器的两种典型应用 什么是触发器?MySQL触发器概念及其应用解析

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

2024-07-11 16:28| 来源: 网络整理| 查看: 265

什么是触发器? 触发器是一种与表操作( INSERT、UPDATE、DELETE)有关的数据库对象。触发器定义了一系列操作,这一系列操作称为触发程序。当触发器所在表上出现INSERT、UPDATE以及DETETE操作时,将激活触发器,即表的操作事件触发表上的触发程序的执行。触发器基于一个表创建,但是可以针对多个表进行操作,所以触发器可以用来对表实施复杂的完整性约束。 触发器的优点 触发器自动执行。当对表进行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表时,可以查看所有数据库中所有触发器的详细信息,查询语句如下: SELECT * FROM information_ schema. triggers \G 删除触发器

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

DROP TRIGGER触发器名;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3