after不能对new进行修改。
两者都不能修改old数据。
触发器,顾名思义,就是当执行某个事件的时候触发另一个事件的执行!这个触发的时间分为BEFORE和AFTER两种,分别有before insert,before update,before delete和after insert,after update,after delete这六种情况
以下的文章主要向大家讲述的是MySQL触发器的实际使用详细说明与实际案例分析,同时本文也列举了一些在MySQL触发器的实际式 *** 作中的代码,以下就是文章的详细内容介绍,望大家借鉴。原文地址:http://database.51cto.com/art/201005/200671.htm
FOR EACH ROW 子句通知触发器每隔一行执行一次动作,而不是对整个表,在触发器中我们经常会用到NEW和OLD这两个关键字,在这里我还是先解释下这两个字的意思!其中NEW是指刚刚插入到数据库的数据表中的一个域,也可以理解为对象(object)的意思。比如在一个insert触发器中我用到了NEW那他的意思就是说,要使用刚刚插入到数据表的某个值,要使用具体的某一个值的话需要这样子写:NEW.字段名(NEW.username)这样子就获取到了刚刚插入到数据表中的一个字段的值!!OLD,OLD是在delete触发器中有用的,意思是说我要删除一条数据,但是在触发器中要用到之前的那个数据,那么我就可以通过OLD来获取了!比如我删除了一条数据,里面包含一个email,现在我在触发器的内部sql中要用就可以这样子写:OLD.email!
对于INSERT语句, 只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在
和NEW以及OLD同时使用。
个人感觉没有什么优缺点之分,看场景选择合适的就好。after—是在记录 *** 纵之后触发,是先完成数据的增删改,再触发,触发的语句晚于监视的增删改 *** 作,无法影响前面的增删改动作,这里没有判断,不知道在性能上是不是有些优势,没有研究过,但是我觉得就算有也是很小的,因为也就new和old。
before—是在记录 *** 纵之前触发,是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的 *** 作,如:我们在触发之前需要判断new值和old值的大小或关系,如果满足要求就触发,不通过就修改再触发;如:表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,这里before相当于设置了断点,我们可以处理删除外键。
有问题欢迎交流讨论,望采纳。
呵呵,看来你不熟悉触发器呀无论是insert触发器还是update触发器,他都有一个before或者after关键字
before 就是在insert或update之前执行触发器
after 就是在insert或update之后执行触发器
例:
CREATE OR REPLACE TRIGGER TR_1 before UPDATE ON TABLE
这和在触发器中用inserted 和updated没关系
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)