有以下一段代码.
create trigger test_trigger_insert
before insert or update on EMP
for each row
begin
:new.JOB:=upper(:new.JOB);
end;第一个问题
关键字before指定在触发语句实际执行之前执行该触发器,对吧?第二个问题
:new.JOB:=upper(:new.JOB);因为用的是NEW,表示新数据,指的是把临时表(inserted)中JOB列转换为大写对吧?第三个问题(最不解的一个问题)
当真实表(EMP)执行INSERT或者UPDATE操作的时候,由于指定的是BEFORE关键字,所以真实表(EMP)的INSERT或者UPDATE操作并不马上执行,而是先执行这个触发器,在这个触发器中,把临时表(虚拟表)中受影响的JOB列转换为大写。
后面的属于我的猜测:触发器执行完毕,更新了inserted表中的数据,然后再把inserted表的相关行更新到真实表中,是这样的吗?如果不是:我就没搞懂了,该触发器没有对真实表(EMP)的具体操作,那么是如何把临时表(inserted)和真实表(EMP)相关联起来的?难道说是真实表(EMP)的INSERT或者UPDATE操作取的是临时表(inserted)里面的数据?
create trigger test_trigger_insert
before insert or update on EMP
for each row
begin
:new.JOB:=upper(:new.JOB);
end;第一个问题
关键字before指定在触发语句实际执行之前执行该触发器,对吧?第二个问题
:new.JOB:=upper(:new.JOB);因为用的是NEW,表示新数据,指的是把临时表(inserted)中JOB列转换为大写对吧?第三个问题(最不解的一个问题)
当真实表(EMP)执行INSERT或者UPDATE操作的时候,由于指定的是BEFORE关键字,所以真实表(EMP)的INSERT或者UPDATE操作并不马上执行,而是先执行这个触发器,在这个触发器中,把临时表(虚拟表)中受影响的JOB列转换为大写。
后面的属于我的猜测:触发器执行完毕,更新了inserted表中的数据,然后再把inserted表的相关行更新到真实表中,是这样的吗?如果不是:我就没搞懂了,该触发器没有对真实表(EMP)的具体操作,那么是如何把临时表(inserted)和真实表(EMP)相关联起来的?难道说是真实表(EMP)的INSERT或者UPDATE操作取的是临时表(inserted)里面的数据?
http://blog.csdn.net/xys_777/archive/2010/07/16/5738567.aspx
http://blog.csdn.net/xys_777/archive/2010/07/16/5738565.aspx
http://blog.csdn.net/xys_777/archive/2010/07/16/5738562.aspx
http://blog.csdn.net/xys_777/archive/2010/07/16/5738555.aspx
这样,我换个提问方法
触发条件是INSERT
当触发器指定BEFORE关键字后,会先执行触发器。.如果我只在触发器里更改了新插入行某个字段的值,当触发器执行完毕的时候,就会跳回引发触发器执行的语句(也就是INSERT操作),那么原触发语句(INSERT)所插入的新行是取的新值吗,如果是,是哪里取到的?