修改MySQL触发器的正确​​方法是什么?

时间:2015-02-11 10:00:30

标签: mysql triggers

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

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

考虑到以下因素,这样做的最佳方式是什么?

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

1 个答案:

答案 0 :(得分:0)

在我发布之前进行测试时,我忽略了我正在获取的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 ;

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