您可能知道,没有语法可以修改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/