我在“多对多”关系中有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
那里有什么问题?
答案 0 :(得分:1)
列的数据类型不匹配有什么不对。
外键列的数据类型必须与引用列完全匹配。 e.g。
fkcol INT UNSIGNED ref -> pkcol INT UNSIGNED
或
fkcol MEDIUMINT ref -> pkcol MEDIUMINT
如果我们尝试使用不同数据类型的列创建外键约束,InnoDB会返回错误。 (OP观察到的行为。)