微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

触发更新所有行

如何解决触发更新所有行

我在使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?