mysql - 触发更新所有行
问题描述
我在使用 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
艾梅
解决方案
检查触发器的 UPDATE 查询:它缺少一个WHERE
子句,因此所有行都Table3
得到更新,而不是匹配所需的行id
。
推荐阅读
- python - 如何用 Python 在阿拉伯语 reportlab 中绘制表格:
- kubernetes - Kubernetes 1.16 上的 Kubeflow 1.0 - 兼容性
- r - 根据标量值更改 visnetwork 的边缘颜色
- python - 如何在 12GB .bin 文件上修复此 IO 绑定 python 操作?
- sql-server - 如何限制 SQL Server 用户只执行某些存储过程?
- javafx - TextInputDialog 的图形不会调整大小
- python - 如何在不覆盖的情况下多次训练 KNN (cv::ml::KNearest)?
- javascript - 如何在本机反应中渲染图像背景内的文本?
- c# - C# 反序列化一个类 - 变量的“默认”值
- python - Python中带有双反斜杠的Windows路径