MySQL Error number: 3104; Symbol: ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN; SQLSTATE: HY000

文档解释

Error number: 3104; Symbol: ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN; SQLSTATE: HY000

Message: Cannot define foreign key with %s clause on a generated column.

错误说明

该错误提醒MySQL在为生成列定义外键操作时发生错误。这是MySQL的一个程序错误,对于MySQL 08.0.1及以上的版本,出现该错误的原因是不能给自动生成的列定义外键处理。

常见案例

常见的情况是,在MySQL中,尝试在一个表中创建一个自动生成列,在另一个表中创建一个外键来引用该生成列时。例如:

CREATE TABLE tbl_test1(

id int NOT NULL AUTO_INCREMENT,

name varchar(255),

PRIMARY KEY(id)

);

CREATE TABLE tbl_test2(

id int NOT NULL REFERENCES tbl_test1(id),

name varchar(255)

);

会出现错误3104:ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN。

解决方法

要解决这个错误,我们不能再给自动生成的列定义外键处理,所以可以试试更改表的定义,使用其他的列来定义主键和外键:

CREATE TABLE tbl_test1(

id1 int NOT NULL AUTO_INCREMENT,

id2 int NOT NULL,

name varchar(255),

PRIMARY KEY(id1, id2)

);

CREATE TABLE tbl_test2(

id1 int NOT NULL,

id2 int NOT NULL,

name varchar(255),

KEY(id1, id2),

FOREIGN KEY (id1, id2) REFERENCES tbl_test1(id1, id2)

);

这样就可以解决这个错误3104:ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN。

你可能感兴趣的