我是靠谱客的博主 结实宝马,最近开发中收集的这篇文章主要介绍什么是触发器?MySQL触发器概念及其应用解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是触发器?

  • 触发器是一种与表操作( INSERT、UPDATE、DELETE)有关的数据库对象。触发器定义了一系列操作,这一系列操作称为触发程序。当触发器所在表上出现INSERT、UPDATE以及DETETE操作时,将激活触发器,即表的操作事件触发表上的触发程序的执行。
  • 触发器基于一个表创建,但是可以针对多个表进行操作,所以触发器可以用来对表实施复杂的完整性约束。

触发器的优点

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

创建触发器

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

需要注意的是:

  1. 触发器是数据库对象,因此创建触发器时,需要指定该触发器属于哪一个数据库。
  2. 触发器是在表上创建的。这个表必须是基表,不能是临时表,也不能是视图。
  3. MySQL的触发事件有三种: INSERT、UPDATE及DELETE
    INSERT:将新记录插入表时激活触发程序。
    UPDATE:更改表中的记录时激活触发程序。
    DELETE:从表中删除记录叶激活触发程序。
  4. 触发器的触发时间有两种:BEFORE和AFTER
    BEFORE表示在触发事件发生之前执行触发程序,AFTER表示在触发事件发生之后执行触发程序。
  5. FOR EACH ROW表示行级触发器。
    目前,MySQL仅支持行级触发器,不支持语句级别的触发器。FOR EACH ROW表示INSERT、UPDATE及DELETE操作影响的每一条记录都会执行一次触发程序
  6. 触发程序中的SELECT语句不能产生结果集。
  7. 触发程序中可以使用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) 含义如下:

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

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

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

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

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

二、查看触发器的定义

  1. 使用SHOW TRIGGERS命令查看触发器的定义。 使用“SHOW TRIGGERSG" 命令可以查看当前数据库中所有触发器的信息。使用“SHOW TRIGGER LIKE模式G"命令查看与模式模糊匹配的触发器的信息。
  2. 使用SHOW CREATE TRIGGER命 令查看触发器的定义。
    使用“SHOW CREATE TRIGGER 触发器名”命令可以查看指定名称
    的触发器的定义。
  3. 通过查询information_ schema数据库中的triggers表,可以查看触发器的定义。
    MySQL中所有触发器的定义都存放在informat ion_ _schema数据库里的triggers表中,查询triggers表时,可以查看所有数据库中所有触发器的详细信息,查询语句如下:
SELECT * FROM information_ schema. triggers G

删除触发器

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

DROP TRIGGER触发器名;

最后

以上就是结实宝马为你收集整理的什么是触发器?MySQL触发器概念及其应用解析的全部内容,希望文章能够帮你解决什么是触发器?MySQL触发器概念及其应用解析所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部