MySQL“多对多”关系错误

时间:2018-03-30 20:06:59

标签: mysql database-design foreign-keys many-to-many constraints

我在“多对多”关系中有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

那里有什么问题?

1 个答案:

答案 0 :(得分:1)

列的数据类型不匹配有什么不对。

外键列的数据类型必须与引用列完全匹配。 e.g。

 fkcol  INT UNSIGNED     ref -> pkcol  INT UNSIGNED

 fkcol  MEDIUMINT        ref -> pkcol  MEDIUMINT

如果我们尝试使用不同数据类型的列创建外键约束,InnoDB会返回错误。 (OP观察到的行为。)