【发布时间】:2020-11-06 23:43:20
【问题描述】:
我希望 B 列的标准值是同一行中 A 列的值,直到通过用户触发的 UPDATE 更改它。这可能吗?
我正在使用 Mysql 8 和 phpmyadmin,如果这很重要的话。
【问题讨论】:
-
您如何区分用户触发的更新与任何其他更新?在 sql update 是一个更新,mysql 无法分辨是谁或什么发布了它。在应用层处理这个可能会更好。话虽如此,如果非用户发出的插入/更新从未设置 B 列,但用户触发的插入/更新总是这样做,那么使用插入/更新之前的触发器,您可以检测到这一点并设置 B 列的值。
-
好吧,作为 phpmyadmin,让我在创建行时将标准值定义为硬编码值,我想也许有一种方法可以轻松地将其指向另一列。如果没有,我只需要在应用程序级别解决这个问题,这没什么大不了的。只是想尝试更好地学习和理解数据库......
-
重复Shadow 所说的,只是为了确保您理解它:您使用了“用户触发更新”一词。您可以有意使用它,因为您想区分用户明确完成的更新和系统完成的更新。或者您可以使用它,因为它听起来不错,而您的意思是“任何更新”。第一个版本使它更复杂(正如 Shadow 所阐述的那样),第二个版本根本不是(它是一个简单的插入触发器,尽管根据您的应用程序,最好手动设置该列)。你也许应该澄清这一点。
-
好的,澄清一下,我的意思是在最初创建行后更改值的任何更新。我使用了用户触发一词,因为这会导致我的应用程序更新,但本质上是任何更新.
-
在这种情况下,您确实可以简单地使用“插入前”触发器,请参阅mysql set field default value to other column(例外:使用自动增量值)