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。