繁体   English   中英

无法在mysql中添加外键

[英]cannot add foreign key in mysql

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

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

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

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

玩家 ID PK Auto_increment等.. .. team_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;

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

不能添加约束的主要原因有两个。

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

第二个是两个表的数据类型是否不同。

运行以下查询以查看玩家表中的团队ID是否存在问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM