MySQL Error number: 3107; Symbol: ER_GENERATED_COLUMN_NON_PRIOR; SQLSTATE: HY000

文档解释

Error number: 3107; Symbol: ER_GENERATED_COLUMN_NON_PRIOR; SQLSTATE: HY000

Message: Generated column can refer only to generated columns defined prior to it.

错误说明: ER_GENERATED_COLUMN_NON_PRIOR 错误号 3107 是MySQL中提示的一种错误,当在MySQL中插入或更新数据时提示这种错误。这里某个被引用的列必须位于指定列之前,比如在空表中插入字段时,被引用的列必须比被插入的字段先出现。

常见案例

CREATE TABLE t1 ( a INT NOT NULL GENERATED ALWAYS AS (b+1), b INT DEFAULT 0 )

以上SQL会报出 ER_GENERATED_COLUMN_NON_PRIOR 错误,因为a列依赖于b列,但是b列没有出现在a列之前。

解决方法:为了解决这种ER_GENERATED_COLUMN_NON_PRIOR错误,可以做以下两种操作:

1. 将b列放在a列之前:

CREATE TABLE t1 ( b INT DEFAULT 0, a INT NOT NULL GENERATED ALWAYS AS (b+1) )

2. 将a列的自动生成属性从总是变成插入时:

CREATE TABLE t1 ( a INT NOT NULL GENERATED BY DEFAULT AS (b+1), b INT DEFAULT 0 )

你可能感兴趣的