Mysql 是否可以将一列的标准值设置为另一列的值?
我希望B列的标准值是同一行中A列的值,直到通过用户触发的更新进行更改。可能吗Mysql 是否可以将一列的标准值设置为另一列的值?,mysql,sql,Mysql,Sql,我希望B列的标准值是同一行中A列的值,直到通过用户触发的更新进行更改。可能吗 如果有必要的话,我使用的是Mysql 8和phpmyadmin。Mysql不允许使用表达式和其他列来默认值 一种解决方案是在表上插入触发器,将B设置为A。但是,如果A发生了变化,这将无法跟踪——除非您有update触发器。但是您不知道何时手动设置了B。哦,这很难跟踪 您可以使用计算列执行其他操作——假设您不希望将B手动设置为NULL。这看起来像: create table t as ( . . . ,
如果有必要的话,我使用的是Mysql 8和phpmyadmin。Mysql不允许使用表达式和其他列来默认值 一种解决方案是在表上插入触发器,将
B
设置为A
。但是,如果A
发生了变化,这将无法跟踪——除非您有update
触发器。但是您不知道何时手动设置了B
。哦,这很难跟踪
您可以使用计算列执行其他操作——假设您不希望将B
手动设置为NULL
。这看起来像:
create table t as (
. . . ,
a int not null,
_b int,
b int generated always as (coalesce(_b, a))
);
然后,在代码中,使用b
进行查询。当您想要设置值时,可以设置\u b
的值
当然,您可以对其进行扩展,以便在
a
或\u b
用于b
时使用布尔标志。但是,使用NULL
来区分是否设置了值说明了这一想法,而且更简单。如何区分用户触发的更新和任何其他更新?在sql更新是一种更新的情况下,mysql无法判断是谁或是什么发布了它。最好在应用程序层处理这个问题。话虽如此,如果非用户发布的insert/updates从未设置B列,但用户触发的insert/updates始终设置B列,那么使用before insert/update触发器可以检测到这一点并设置B列的值。好的,作为phpmyadmin,让我在创建行时定义一个标准值作为硬编码值,我想也许有一种方法可以很容易地把它指向另一个专栏。如果没有,我只需要在应用程序级别解决这个问题,这没什么大不了的。只是想更好地学习和理解数据库……重复Shadow所说的,只是为了确保您理解它:您使用了术语“用户触发的更新”。您可能有意使用此选项,因为您希望区分由用户显式完成的更新和由系统完成的更新。或者你可以用它,因为它听起来不错,你只是说“任何更新”。第1个版本使它变得更复杂(正如Shadow所阐述的),第2个版本则完全不是(它是一个简单的插入触发器,尽管根据应用程序的不同,手动设置该列可能更好)。您可能应该澄清这一点。好的,澄清一下,我指的是在最初创建行后更改值的任何更新。我使用了术语“用户触发”,因为这会导致我的应用程序中出现更新,但本质上是任何更新。在这种情况下,您确实可以使用“插入前”触发器,请参阅(例外:使用自动增量值)