此列添加语句中的语法错误是什么?
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_on
是 DATE
和 delivery_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
我想要一个列,其值依赖于 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_on
是 DATE
和 delivery_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