我想使用MYSQL添加生成的列,该列基本上取决于其他一些列,并且在某些情况下还取决于它自己。有可能这样做吗?
另外,在添加具有默认值的生成列时遇到了一些错误。这是我正在尝试的命令:
ALTER TABLE temp
ADD COLUMN abc INT AS
(CASE
WHEN cde > 95 THEN "1"
WHEN cde < 80 THEN "0"
WHEN (cde > 79 AND cde < 96) THEN abc
END) DEFAULT 0
我可以用生成的列实现类似的功能吗?
分析解答
啊,现在我明白了您要做什么。如果cde
发生更改,则在某些情况下只希望更改abc
,而在其他情况下则不需要。
因此,它不是您要查找的生成的列,因为此类列仅取决于行的当前字段。您需要一个触发器,该触发器根据cde
的新值来更改或不更改abc
。
看一下如何编写这样的触发器的文档:https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
在BEFORE触发器中,还可以使用SET NEW.col_name = value更改其值(如果您具有UPDATE特权)。这意味着您可以使用触发器来修改要插入到新行中或用于更新行的值。 (这样的SET语句在AFTER触发器中无效,因为行更改已经发生。)