MySQL "many to many"关系错误

标签 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

哪里出了问题?

最佳答案

问题是列的数据类型不匹配。

外键列的数据类型必须与引用的列完全匹配。例如

 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/

相关文章:

MySQL存储过程,用变量定义CURSOR FOR

php - 划分两列并将结果设置在第三个PHPMYADMIN?

php - 多类别/产品关系的数据库模式

sql - 多少个外键太多了?

java - Java 中 DAO 中的外键

c# - Entity Framework 6 - 代码优先 - FK 在继承类中生成,但关系在基类中定义

MySQL 全文搜索怪癖?

mysql - 部署在 ec2 上的 Spring war 文件显示连接到 rds 的 hibernate 持久性失败

mysql - SQL 默认 NOW()(UTC)

database - 3 个不同表中的用户、客户、管理员帐户?