首页 > 开发 > 综合 > 正文

数据库触发器

2024-07-21 02:53:02
字体:
来源:转载
供稿:网友
触发器是一种特殊的存储过程,它不带任何的输入输出参数,不能被显式调用。顾名思义,就是当执行某个事件时触发另一个事件的执行。触发的时间分为两种,分别为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 insert和before update触发器中,可以对new进行修改;而在after insert和after update触发器中不能对new进行修改;before和after的触发器都不能对old进行修改。应用举例:在MySQL中,当我们每次对学生数据进行修改时,通过触发器去更新最后更新时间,其代码如下。

-- 本例中,登录用户为root,数据库名为School,修改表为student,每次触发修改最后更新时间updatetime,触发器名student_updateDELIMITER $$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 ;


上一篇:RAID 级别介绍

下一篇:JDBC的tinyInt1isBit

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表