什么是触发器?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 TRIGGERS\G" 命令可以查看当前数据库中所有触发器的信息。使用“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触发器名;
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值