MySQL外键错误代码1215

MySQL外键错误代码1215,mysql,foreign-keys,Mysql,Foreign Keys,我在尝试向表中添加列时收到一个错误,该表的外键是现有表的外键。以下是两条失败的SQL语句: ALTER TABLE current_teams ADD COLUMN master_team_id INT, ADD FOREIGN KEY fk_master_team_id(master_team_id) REFERENCES master_teams(id) ON DELETE CASCADE; ALTER TABLE current_teams ADD COLUMN player_id IN

我在尝试向表中添加列时收到一个错误,该表的外键是现有表的外键。以下是两条失败的SQL语句:

ALTER TABLE current_teams ADD COLUMN master_team_id INT,
ADD FOREIGN KEY fk_master_team_id(master_team_id) REFERENCES master_teams(id) ON DELETE CASCADE;

ALTER TABLE current_teams ADD COLUMN player_id INT,
ADD FOREIGN KEY fk_player_id(player_id) REFERENCES players(id) ON DELETE CASCADE;
我得到的错误是:错误代码:1215。无法添加外键约束

运行innodb时,更详细的消息显示:

2016-02-03 17:22:43 0x3210表的外键约束错误 lod/#sql-1d58_6:外键fk_主团队id(主团队id) 在删除级联上引用主控团队(
id
):无法解析表 删除级联上靠近:(
id
)的名称

奇怪的是,在其他表中,添加完全相同的外键可以正常工作。这些语句没有问题:

ALTER TABLE team_scouting ADD COLUMN master_team_id INT, 
ADD FOREIGN KEY fk_master_team_id(master_team_id) REFERENCES master_teams(id) ON DELETE CASCADE;
ALTER TABLE team_scouting ADD COLUMN player_id INT, 
ADD FOREIGN KEY fk_player_id(player_id) REFERENCES players(id) ON DELETE CASCADE;
SHOW CREATE TABLE masterteams
的结果如下:

'CREATE TABLE `master_teams` (
  `team_name` varchar(45) DEFAULT NULL,
  `owner_name` varchar(45) DEFAULT NULL,
  `max_salary` double DEFAULT NULL,
  `penalty` int(11) DEFAULT ''0'',
  `username` varchar(10) DEFAULT NULL,
  `password` varchar(25) DEFAULT NULL,
  `rights` varchar(10) DEFAULT NULL,
  `email` varchar(100) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1'

只有在此“current_teams”表中,添加列/外键才会失败。任何帮助都会很好!谢谢。

您的
master_团队
表不是InnoDB表,因此InnoDB引擎“无法解析”表名。尝试这样更新它:

ALTER TABLE master_teams ENGINE = InnoDB;
正如巴尔马在评论中所说的那样。如果不指定名称,MySQL将为您补足:

如果给出了
约束
符号
子句,则符号值(如果使用)在数据库中必须是唯一的。重复的符号将导致类似以下错误的错误:
错误1005(HY000):无法创建表“测试”。#sql-211d_3'(错误号:121)。
如果未给出子句,或者
约束
关键字后未包含符号,则会自动创建约束的名称


执行
SHOW CREATE TABLE master_teams
并将结果添加到问题中。尝试运行此alter TABLE时master_teams表是否存在?不能重复使用相同的约束名称
fk_master_team id
。每个约束都需要有一个唯一的名称。@Barmar我也想到了这一点,并尝试重命名它,但仍然不起作用。另外,我使用相同命名外键的其他表仍然可以工作。只有这一个表失败。谢谢-引擎是问题所在,我不再收到错误。但是,约束名称没有抛出错误,即使它们不是唯一的。我不会冒险,坚持使用唯一的名称。