在oracle中,当编写一个处理插入、更新或删除操作的唯一触发器时,什么时候可以使用这种称为“条件 predicate ”的技术来检测正在执行的操作
create trigger sample_trigger
before insert or update
on sample_table
for each row
begin
case
when inserting then
--do something
when updating then
--do something
end case;
end;
MySQL5.6是否提供了允许我这样做的技术?我不想只编写三个不同的触发器来区分正在执行的操作。谢谢!
2条答案
按热度按时间643ylb081#
不,在mysql中(甚至在8.0中),触发器只能为一种操作调用,
INSERT
,UPDATE
或者DELETE
. 从手册中,语法CREATE TRIGGER
是:以及
trigger_event
可能只是其中之一INSERT
,UPDATE
或者DELETE
:因此,如果没有为不同的操作调用触发器的作用域,就不需要使用您描述的条件 predicate 。
相反,您可以将触发器代码放入存储过程中,然后使用指定操作类型(例如
INSERT
你可能会用的触发器mzaanser2#
不幸的是你不能。
您可以看到文档中声明您只能使用一个事件触发触发器。
语法:
触发事件:{insert | update | delete}
这意味着您只能选择一个事件作为触发器事件。
同一文档的另一个参数:
给定表不能有多个触发器具有相同的触发器事件和操作时间。例如,一个表不能有两个before update触发器。但是可以有一个before update和before insert触发器,或者一个before update和after update触发器。