mysql - 尝试使用外键创建表时出现错误 1005

标签 mysql database database-design foreign-keys

我正在尝试创建一些代表梦幻足球联赛的表格,该联赛本身包含球队,其本身包含精选的球员,这些球员是具有统计数据的球员。我现在有一个非常基本的草稿,我正在尝试让我的外键正常工作,但是,当我尝试添加 key 时,我不断收到此错误:

ERROR 1005 (HY000) at line 19: Can't create table 'football_db.PickedPlayers' (errno: 150)

我当然用谷歌搜索了一下,正如错误消息所示,问题与我在该表上的外键有关。

我可以不添加多组外键吗?或者是我选择的外键类型?提前致谢。

CREATE TABLE football_db.Leagues
    (league_id INT NOT NULL,
     league_name VARCHAR(100),
     PRIMARY KEY (league_id))
    ENGINE=INNODB;
CREATE TABLE football_db.Teams
    (league_id INT NOT NULL,
     team_id INT NOT NULL,
     team_name VARCHAR(100),
     PRIMARY KEY (league_id,team_id),
     FOREIGN KEY (league_id) REFERENCES Leagues(league_id))
    ENGINE=INNODB;
CREATE TABLE football_db.PickedPlayers
    (league_id INT NOT NULL,
     team_id INT NOT NULL,
     player_id INT NOT NULL,
     PRIMARY KEY (player_id),
     FOREIGN KEY (league_id,team_id) REFERENCES Teams(league_id,team_id),
     FOREIGN KEY (player_id) REFERENCES Players(player_id))
    ENGINE=INNODB;
CREATE TABLE football_db.Players
    (player_id INT NOT NULL,
     player_name VARCHAR(50),
     position VARCHAR(10),
     is_free_agent BOOL,
     PRIMARY KEY (player_id))
    ENGINE=INNODB;

最佳答案

在创建此表之前,您要引用表players,只需将创建表CREATE TABLE Football_db.PickedPlayers移动到最后一个位置,如下所示:

 CREATE TABLE Leagues
(league_id INT NOT NULL,
 league_name VARCHAR(100),
 PRIMARY KEY (league_id))
ENGINE=INNODB;
CREATE TABLE Teams
(league_id INT NOT NULL,
 team_id INT NOT NULL,
 team_name VARCHAR(100),
 PRIMARY KEY (league_id,team_id),
 FOREIGN KEY (league_id) REFERENCES Leagues(league_id))
ENGINE=INNODB;
CREATE TABLE Players
(player_id INT NOT NULL,
 player_name VARCHAR(50),
 position VARCHAR(10),
 is_free_agent BOOL,
 PRIMARY KEY (player_id))
ENGINE=INNODB;
CREATE TABLE PickedPlayers
(league_id INT NOT NULL,
 team_id INT NOT NULL,
 player_id INT NOT NULL,
 PRIMARY KEY (player_id),
 FOREIGN KEY (league_id,team_id) REFERENCES Teams(league_id,team_id),
 FOREIGN KEY (player_id) REFERENCES Players(player_id))
ENGINE=INNODB;

Live working demo

关于mysql - 尝试使用外键创建表时出现错误 1005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19120982/

相关文章:

mysql - 问题改变 innodb_log_file_size

sql - 从数据库中删除记录的替代方法?

sql-server - 如何在数据库中表示继承?

MySQL:从具有相同列名的连接表中选择非空值

mysql - 无法添加 FK 约束 #1215

database - 来自现有数据库的 Symfony2 Doctrine2 映射(异常(exception))

php - 如何按两行的划分对sql输出进行排序?

mysql - 结果太慢,任何人都可以提供提升(查询工作文件中的 10 条记录,但需要时间来获取更多记录))

database-design - 数据库设计 - 文章、博客文章、照片、故事

php - fatal error : [] operator not supported for strings