我有 3 个处于“多对多”关系的表。
表A:
CREATE TABLE IF NOT EXISTS tabA(
tabAcolA mediumint unsigned not null auto_increment,
tabAcolB text not null,
tabAcolC text null,
PRIMARY KEY keyA (tabAcolA)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
表B:
CREATE TABLE IF NOT EXISTS tabB(
tabBcolA mediumint unsigned not null auto_increment,
tabBcolB text not null,
PRIMARY KEY keyB (tabBcolA)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
表C(AB接头):
CREATE TABLE IF NOT EXISTS tabC(
tabCcolA int unsigned not null,
tabCcolB int unsigned not null,
PRIMARY KEY keyC (tabCcolA,tabCcolB),
CONSTRAINT FkeyA FOREIGN KEY (tabCcolA)
REFERENCES tabA(tabAcolA) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT FkeyB FOREIGN KEY (tabCcolB)
REFERENCES tabB(tabBcolA) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB
它返回一个错误:
1215 Cannot add foreign key constraint
哪里出了问题?
最佳答案
问题是列的数据类型不匹配。
外键列的数据类型必须与引用的列完全匹配。例如
fkcol INT UNSIGNED ref -> pkcol INT UNSIGNED
或
fkcol MEDIUMINT ref -> pkcol MEDIUMINT
如果我们尝试使用不同数据类型的列创建外键约束,InnoDB 将返回错误。 (OP观察到的行为。)
关于MySQL "many to many"关系错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49580768/