代码之家  ›  专栏  ›  技术社区  ›  dryhay

MySQL“多对多”关系错误

  •  0
  • dryhay  · 技术社区  · 7 年前

    我有三张“多对多”关系的表。

    表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 回复  |  直到 7 年前
        1
  •  1
  •   spencer7593    7 年前

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

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

     fkcol  INT UNSIGNED     ref -> pkcol  INT UNSIGNED
    

     fkcol  MEDIUMINT        ref -> pkcol  MEDIUMINT
    

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