如何解决触发更新所有行
我在使用 MysqL 触发器时遇到问题。
我有一个包含一些基本信息的员工表。然后我有一个 VIEW,我们称之为 Finance_system。 Finance_system VIEW 包含来自许多来源的大量信息。 Finance_system 中的一些列与内部销售抽奖相关,并在每次查询 Finance_system VIEW 时从其他表返回随机值。最后,我有一张名为 EP1 的表。它的工作是保存来自 Finance_system 的一些数据,特别是一些具有随机值的列。这可以防止他们在每次查询时更新/更改。 EP1 表通过 TRIGGER 进行更新,该 TRIGGER 在对员工表中的某些列进行更新后触发。触发器工作并且 EP1 表得到更新,但它正在更新整个表,而不是与已更新的 employee_id 关联的行。
我在发帖之前阅读了 Stacks 政策,并了解需要可重现的示例,因此我创建了一个 fiddle,但我对数据进行了混淆处理,只包含了几列。希望这已经足够了,因为我已经用尽了谷歌试图找出它不工作的原因。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=942dbabba180df86b7ac9317bbcdd64b
编辑:
更简单的版本:当 Table1.status 更新时,触发器应该使用 Table2.rand1 中 ID 匹配的值更新 Table3.rand1。每个 ID 在 Table2 和 Table3 中有两行。我当前的问题是,当触发器触发时,它会更新 Table3 中的所有行,我希望它只更新与 Table1 中更新的 ID 关联的行。在这种情况下,连接不起作用,因为 Table2 实际上是在我的真实数据中使用 rand() 的 VIEW。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=329e2dd3bf2fff39afc5388721c53ddc
艾米
解决方法
检查触发器的 UPDATE 查询:它缺少 WHERE
子句,因此 Table3
的所有行都得到更新,而不是与所需的 id
匹配的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。