数据库触发器

触发器是一种特殊的存储过程,它不带任何的输入输出参数,不能被显式调用。顾名思义,就是当执行某个事件时触发另一个事件的执行。
触发的时间分为两种,分别为DDL(包括CREATE、ALTER和DROP)和DML(包括INSERT、UPDATE和DELETE)两大类。这里只对DML类型触发器进行介绍。
在DML类型触发器中,触发时间分为两类,分别为BEFORE和AFTER。触发事件有insert、update和delete三种,所以触发器共有六种情况,分别为before insert,before update,before delete和after insert,after update,after delete这六种情况。

在写触发器时,经常会用到new和old这两个关键字,那它们的应用范围是怎样的呢?new只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据;update时new表示要替换的新数据行,old表示要被更改的原来的数据行;delete时old表示要被删除的数据。
FOR EACH ROW 子句通知触发器每隔一行执行一次动作,而不是对整个表。
BEFORE和AFTER的区别:before insertbefore update触发器中,可以对new进行修改;而在after insertafter
update
触发器中不能对new进行修改;before和after的触发器都不能对old进行修改。应用举例:在mysql中,当我们每次对学生数据进行修改时,通过触发器去更新最后更新时间,其代码如下。

-- 本例中,登录用户为root,数据库名为School,修改表为student,每次触发修改最后更新时间updatetime,触发器名student_update
DELIMITER $$
USE `School`$$
DROP TRIGGER /*!50032 IF EXISTS */ `student_update`$$
CREATE
    /*!50017 DEFINER = 'root'@'%' */
    TRIGGER `student_update` BEFORE UPDATE ON `student` 
    FOR EACH ROW BEGIN
		SET new.updatetime :=NOW();
	END;
$$
DELIMITER ;

IT文库 » 数据库触发器
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址