:new—
触发器执行过程中触发表作操作的当前行的新纪录
:old—
触发器执行过程中触发表作操作的当前行的旧纪录
我们在使用
:new
或者
:old
的操作时需要注意以下问题:
1、
必须是行级触发器,因为
:new
或者
:old
是当前触发表操作的当前行的新数据或者旧数据,所以必须在行级触发器中才能使用。否则编译时会出现错误。
2、
当触发器被不同事件触发时,需要注意:
insert
触发操作
只有
:new
delete
触发操作
只有
:old
update
触发操作
都有。
如果违反上述操作中随意使用
:new
或者
:old
不会在编译时报错误但是会发现使用这两个关键字无效。
3、
使用触发器时如果要修改
:new
的值需要注意:
只有行级前触发器才能修改
:new
的值,而行级后触发器不可以。
因为行级前触发器是在本行
DML
操作之前,所以才能修改
:new
的值。从逻辑上说,也只有在这时修改才有意义。如果行级后触发器要试图修改
:new
的值会报变异错误。从逻辑上说后触发器的执行已经在本行
DML
操作,以后了,再修改
:new
的值已经不会对数据产生影响了。
4、
当在触发条件中使用
:new
或者
:old
的时候注意,只能直接写
old
或者
new
,不能带符号
”:”
否则会出错。