首页 > 解决方案 > 触发更新所有行

问题描述

我在使用 MySQL TRIGGER 时遇到问题。

我有一个包含一些基本信息的员工表。然后我有一个我们称之为财务系统的视图。Finance_system 视图包含来自许多来源的大量信息。Finance_system 中的一些列与内部销售抽奖相关,并在每次查询 Finance_system VIEW 时从其他表中返回随机值。最后,我有一个名为 EP1 的表。它的工作是保存金融系统中的一些数据,尤其是一些具有随机值的列。这可以防止他们在每次查询时更新/更改。EP1 表通过触发 AFTER AN UPDATE 对employees 表中的某些列进行更新。触发器工作并且 EP1 表得到更新,但它更新的是整个表,而不是与已更新的employee_id 关联的行。

我在发布之前阅读了 Stacks 政策,并了解需要一个可重现的示例,所以我创建了一个 Fiddle,但我混淆了数据并且只包含了几列。希望这已经足够了,因为我已经让谷歌筋疲力尽,试图弄清楚它为什么不起作用。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=942dbabba180df86b7ac9317bbcdd64b

编辑:

更简单的版本:当 Table1.status 更新时,触发器应该使用 ID 匹配的 Table2.rand1 中的值更新 Table3.rand1。每个 ID 在 Table2 和 Table3 中有两行。我当前的问题是,当触发器触发时,它会更新 Table3 中的所有行,我希望它只更新与 Table1 中更新的 ID 关联的行。在这种情况下,连接不起作用,因为 Table2 实际上是在我的真实数据中使用 rand() 的 VIEW。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=329e2dd3bf2fff39afc5388721c53ddc

艾梅

标签: mysql

解决方案


检查触发器的 UPDATE 查询:它缺少一个WHERE子句,因此所有行都Table3得到更新,而不是匹配所需的行id


推荐阅读