在Oracle中,编写用于处理INSERT,UPDATE或DELETE操作的唯一触发器时,何时可以检测到使用此技术执行的操作,称为“ Conditional Predicates”
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;
MySQL 5.6是否提供允许我执行相同操作的任何技术?我不想编写三个不同的触发器只是为了区分正在执行哪个操作。谢谢!
答案 0 :(得分:1)
不。在MySQL中(甚至在8.0中),只能为一种操作类型INSERT
,UPDATE
或DELETE
调用触发器。在中,CREATE TRIGGER
的语法为:
CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ...
和trigger_event
只能是INSERT
,UPDATE
或DELETE
之一:
trigger_event: { INSERT | UPDATE | DELETE }
因此,鉴于没有范围可以为不同的操作调用触发器,因此无需使用您描述的条件谓词。
您可以做的是将触发代码放入存储过程中,然后使用一个参数来调用它,该参数指定操作类型是否为对于INSERT
触发器,您可以使用
CREATE TRIGGER db_insert
BEFORE INSERT ON db
FOR EACH ROW
BEGIN
CALL db_trigger_proc('INSERT');
END
答案 1 :(得分:0)
不幸的是你不能。
您会看到documentation指出只能使用一个事件来触发触发器。
语法:
trigger_event:{插入|更新|删除}
这意味着您只能选择一个事件作为trigger_event。
同一文档上的另一个参数:
对于给定的表,不能有多个具有相同触发事件和动作时间的触发。例如,一个表不能有两个BEFORE UPDATE触发器。但是您可以使用BEFORE UPDATE和BEFORE INSERT触发器,也可以使用BEFORE UPDATE和AFTER UPDATE触发器。