如何识别mysql触发操作

daupos2t  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(265)

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

643ylb08

643ylb081#

不,在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 }

因此,如果没有为不同的操作调用触发器的作用域,就不需要使用您描述的条件 predicate 。
相反,您可以将触发器代码放入存储过程中,然后使用指定操作类型(例如 INSERT 你可能会用的触发器

CREATE TRIGGER db_insert
BEFORE INSERT ON db
FOR EACH ROW
BEGIN
    CALL db_trigger_proc('INSERT');
END
mzaanser

mzaanser2#

不幸的是你不能。
您可以看到文档中声明您只能使用一个事件触发触发器。
语法:
触发事件:{insert | update | delete}
这意味着您只能选择一个事件作为触发器事件。
同一文档的另一个参数:
给定表不能有多个触发器具有相同的触发器事件和操作时间。例如,一个表不能有两个before update触发器。但是可以有一个before update和before insert触发器,或者一个before update和after update触发器。

相关问题