如何识别MySQL触发器操作

时间:2018-12-26 02:31:04

标签: mysql triggers

在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是否提供允许我执行相同操作的任何技术?我不想编写三个不同的触发器只是为了区分正在执行哪个操作。谢谢!

2 个答案:

答案 0 :(得分:1)

不。在MySQL中(甚至在8.0中),只能为一种操作类型INSERTUPDATEDELETE调用触发器。在result of no enough data中,CREATE TRIGGER的语法为:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ...

trigger_event只能是INSERTUPDATEDELETE之一:

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触发器。