更新VIRTUAL GENERATED列

时间:2018-06-03 15:05:57

标签: mysql

UPDATE reservation SET NB_RESTE=1 WHERE IDRESERVATION='28'

我想更新NB_RESTE值,但它不会工作,即使我尝试更新另一列它正常工作知道NB_RESTE是虚拟生成

错误消息:

  

#3105 - 不允许在表'预订'中为生成的列'NB_RESTE'指定的值。

2 个答案:

答案 0 :(得分:3)

正如update statement上的mysql手册所说:

  

如果显式更新生成的列,则唯一允许的值为DEFAULT。

这是完全合乎逻辑的,因为字段的值是由表达式生成的。在虚拟卷的情况下,表中甚至没有存储值。如果要更改生成列的值,请更新生成的字段。

答案 1 :(得分:0)

虚拟生成的列不能更改为存储的生成的列,反之亦然。要解决此问题,请删除该列,然后添加新定义。

CREATE TABLE t1 (c1 INT, c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL);
ALTER TABLE t1 DROP COLUMN c2;
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;

来源:https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/alter-table-generated-columns.html