您可能知道,没有语法可以修改MySQL触发器。

为此,您需要执行DROP TRIGGER,然后使用新定义再次重新创建它。

考虑以下因素,什么是正确/最佳方法?


您不能将这两个语句封装在事务中,因为这将毫无意义(DROP TRIGGER和CREATE TRIGGER都调用隐式事务)
您不能使用LOCK TABLES READ作为触发错误
在您的DROP和CREATE TRIGGER之间,某些其他会话可能会插入/更新/删除行,无论新触发器还是旧触发器都不会处理该行。

最佳答案

在发布之前进行测试时,我忽略了要获取的LOCK类型,它是READ。

因此,似乎使用WRITE锁可以完成此工作:

delimiter $$

LOCK TABLES table1 WRITE $$

DROP TRIGGER IF EXISTS after_insert_on_table1 $$

CREATE TRIGGER after_insert_on_table1 AFTER INSERT ON table1
FOR EACH ROW
    BEGIN
        ...
    END
$$

delimiter ;


因此,我的建议是在更新/修改触发器时始终使用此序列。

关于mysql - 修改MySQL触发器的正确​​方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28451395/

10-09 16:53
查看更多