此列添加语句中的语法错误是什么?

What is the syntax error in this column addition statement?

我想要一个列,其值依赖于 MySQL Server 5.7 (InnoDB Cluster) 中相同 table 的其他列。

作为我陈述的基础和测试,我使用了以下指令:

ALTER TABLE contracts
ADD COLUMN curr_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

但我希望我的列是 DATE 并且值始终是公式 ADDDATE(order_loaded_on, INTERVAL FLOOR(delivery_time * 1.4) DAY) 得出的日期(其中 order_loaded_onDATEdelivery_time 是一个 INT),所以我写了 运行 以下内容:

ALTER TABLE contracts
ADD COLUMN est_delivery_on DATE
DEFAULT ADDDATE(order_loaded_on, INTERVAL FLOOR(delivery_time * 1.4) DAY)
ON UPDATE ADDDATE(order_loaded_on, INTERVAL FLOOR(delivery_time * 1.4) DAY)

但它 returns 是第 4 行 ADDDATE(order_loaded_on, INTERVAL FLOOR(delivery_time * 1.4) DAY) 附近的语法错误,所以我 运行 它没有 ON UPDATE 子句并且它有效。问题是如果没有后一个子句,它不会在记录更改时更新。

我哪里做错了?

更新:

根据建议,我尝试将其添加为生成的列 运行 以下内容:

ALTER TABLE CrmContratto ADD COLUMN PrevistaConsegna DATE AS ADDDATE(DataCaricamentoOrdine, INTERVAL FLOOR(TempiConsegna * 1.4) DAY)

但它returns另一个语法错误。

正确的陈述在接受的答案中。谢谢。

您不能使用 ON UPDATE 中的函数。

但是您可以使用生成的列,它的作用与插入或更新行时生成其值的方式相同

ALTER TABLE contracts
ADD COLUMN est_delivery_on DATE
GENERATED ALWAYS AS (order_loaded_on + INTERVAL FLOOR(delivery_time * 1.4) DAY) STORED