1

您好,我想创建一个外键来关联 2 个表,但是当我使用此查询时

ALTER TABLE Player
ADD CONSTRAINT FK_team_id FOREIGN KEY (team_id)
REFERENCES Team(id);

我收到错误错误代码:1215 无法添加外键约束

我正在使用带有 utf8 编码的 innoDB 引擎。表 Player 和 Team 看起来像这样

Player id PK Auto_increment etc .. .. team_id (必须是外键)

团队 ID PK ..

有人有解决方案吗?

这是创建表的语法

    CREATE TABLE `Player` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(100) DEFAULT NULL,
  `Firstname` varchar(100) DEFAULT NULL,
  `Prefix` varchar(50) DEFAULT NULL,
  `Age` date DEFAULT NULL,
  `Position` varchar(2) DEFAULT NULL,
  `Caps` tinyint(3) DEFAULT NULL,
  `Goals` tinyint(3) DEFAULT NULL,
  `Captain` tinyint(1) DEFAULT NULL,
  `team_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 CREATE TABLE `Team` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(100) DEFAULT NULL,
  `Coach` varchar(100) DEFAULT NULL,
  `Prefix` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
4

2 回答 2

2

确保两列相同(SIGNEDNULLable 等)。此外,被引用的任何值都必须存在于被引用的表中。否则,SHOW INNODB STATUS请在尝试创建密钥后运行以获取更多信息。

于 2013-05-22T15:09:31.547 回答
0

无法添加约束的主要原因有两个。

第一个(也是最有可能的)是 Player 表中有一个或多个 team_id 的数据,而 Team_id 表中不存在该数据。

二是如果两个表的数据类型不同。

运行以下查询以查看 player 表中的团队 id 是否有问题:

select team_id
from Player
where team_id not in (select id from team)

本质上,这将识别缺少的 team_id。根据需要进行修复。要查找的一件事是球员表中的 team_id 为 -1 或 0(无论您的默认值是什么),这在球队表中没有表示。

于 2013-05-22T17:40:19.050 回答