MySQL: INSERT INTO ... ON DUPLICATE KEY UPDATE 不触发 AFTER UPDATE 触发器

标签 mysql triggers

我有一个令人困惑的问题。 我使用的是 5.6.12 社区版。

我有一个 AFTER UPDATE 触发器,它工作正常,例如当调用表时

UPDATE test_table SET TestVariable = 2 WHERE TestIndex = 2;

但是当我使用

INSERT INTO test_table (TestIndex,TestVariable) VALUES (2,3) ON DUPLICATE KEY UPDATE TestVariable = 3;

UPDATE-Trigger 没有被“触发”。

这当然是一个非常简化的案例,与我当前的代码无关。我没有找到太多关于此的信息。在我看来,对 DUPLICTE KEY 的更新在内部是一个正常的更新,应该调用我的触发器。

有没有人做过类似的观察,或者可以向我解释,为什么 MySQL 会这样,或者向我保证,我的设置中一定有一些错误,因为它应该可以工作?

我不需要建议的答案,我不应该使用 INSERT INTO ... ON DUPLICTE KEY ...,因为 a) 那不是问题 和 b) 我无法轻易修改我当前正在处理的业务应用程序。

非常感谢您的帮助

最佳答案

我已经在尽可能小的规模上对此进行了测试并得出了结论。

  1. 更新触发器工作正常,正如您所期望的那样。它由 ON DUPLICATE UPDATE 调用。我可以通过从控制台调用查询来重现这一点。

  2. 当我使用 Oracle .net 连接器从我的 .net 代码执行查询时,没有调用更新触发器(正如我所报告的)!我已经安装了当前版本 6.9.8.0。到目前为止,我不知道这是当前版本中的错误,还是普遍存在的问题。我将进一步调查,但对于这种情况,我的问题得到了回答。

问题是为了澄清不是 MySQL 问题,而是连接器问题。

谢谢大家的帮助。

关于MySQL: INSERT INTO ... ON DUPLICATE KEY UPDATE 不触发 AFTER UPDATE 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800050/

相关文章:

php - 可以在 MySQL 插入上执行 PHP?

mysql - 如何诊断 MySQL 触发器中的步骤

mysql - 错误代码 : 3175. 无法在基列具有外部约束的虚拟列上创建索引

mysql - SQL 查询从以下情况的两个表中检索数据

具有许多更新的 MySQL 事务

sql-server - 什么时候触发,什么时候不触发

MySQL创建触发器关键字

PHP MySQL echo 计数

php - Doctrine 用括号替换最后一个查询字符

javascript - 暂时禁用触发器