外键约束错误 - MySQL

时间:2017-01-17 17:04:20

标签: mysql database

我正在尝试创建一个包含游戏信息的数据库,但是在创建分配主键和外键的表时遇到问题。任何帮助都会很棒。

我得到的错误代码是:#1215 - 无法在表Boss上添加外键约束。它创建第一个表,它只是停止工作,并在创建表老板时抛出外键错误。

在项目表中,字段Boss需要能够为多个不同的项目输入相同的数据。

CREATE TABLE item ( ID SERIAL, Name VARCHAR(35), Boss VARCHAR(25), Type VARCHAR(20), Slot VARCHAR(20),  PRIMARY KEY (Name,Boss) );
CREATE TABLE boss ( ID SERIAL, Boss VARCHAR(25), Type VARCHAR(20), Location VARCHAR(20), Difficulty INT, PRIMARY KEY (ID, Location), FOREIGN KEY (Boss) REFERENCES item(Boss) );
CREATE TABLE dungeon ( ID SERIAL, Name VARCHAR(25), Location VARCHAR(20), Rating INT, PRIMARY KEY (Name), FOREIGN KEY (Location) REFERENCES boss(Location) );

1 个答案:

答案 0 :(得分:0)

我可以看到你的数据库创建脚本有很多问题,但我只会坚持那些会立即影响它的工作原因:

  1. 您应该始终通过其主键引用另一个表,而不是其他任何表。

  2. 您的引用放在错误的表格中。如果你想引用一个老板"来自" item"那么你应该这样做而不是参考" item"来自"老板"。

  3. 但最重要的是引用应该与它们引用的主键的类型相同。

  4. 如果你真的不需要复合键是一个坏主意。

  5. 所以,一个工作脚本将是:

    CREATE TABLE dungeon ( ID BIGINT(20), Name VARCHAR(25), Location VARCHAR(20), Rating INT, PRIMARY KEY (ID) );
    
    CREATE TABLE boss ( ID BIGINT(20), Type VARCHAR(20), LocationId BIGINT(20), Difficulty INT, PRIMARY KEY (ID), FOREIGN KEY (LocationId) REFERENCES dungeon (ID) );
    
    CREATE TABLE item ( ID BIGINT(20), Name VARCHAR(35), BossId BIGINT(20), Type VARCHAR(20), Slot VARCHAR(20),  PRIMARY KEY (ID), FOREIGN KEY (BossId) REFERENCES boss (ID) );
    

    您可以根据自己的需要进行调整,但在此之前,我建议您阅读一本关于数据库设计的好书,或者至少是关于基本关系数据库原则的教程。