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

标签 mysql triggers

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

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

什么是正确/最好的方法,考虑以下因素:

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

最佳答案

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

UNLOCK TABLES $$

delimiter ;

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

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

相关文章:

postgresql - 在 PostgreSQL 中每行只执行一次延迟触发器

javascript - 如何将参数传递给基于时间的 Google App Script 触发器?

php - 在 while 循环中调用 mysql PROCEDURE 只在第一次工作

mysql - Redis和mysql数据库

mysql - 如何创建触发器(Mysql)

php - 阻止表更新查询 20 秒。可能的?

mysql - Npm mysql - 我不能使用单个对象查询 WHERE 条件吗?

php - 使用递归查找用户是否是另一个用户php mysql的推荐人

MySQL:将结果拆分为两个不同的列

c# - 将触发器值绑定(bind)到属性