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 )