MySQL外键错误代码1215

时间:2016-02-03 22:24:25

标签: 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 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:FOREIGN KEY fk_master_team_id(master_team_id)   参考master_teams(id)ON DELETE CASCADE:无法解析表   名称接近:(id)ON DELETE CASCADE

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

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'表确实添加了列/外键失败。任何帮助都会很棒!感谢。

1 个答案:

答案 0 :(得分:1)

您的master_teams表不是InnoDB表,因此InnoDB引擎"无法解析"表名。尝试更新它:

ALTER TABLE master_teams ENGINE = InnoDB;

巴马尔在评论中说constraint names do need to be globally unique。如果您没有指定MySQL将为您填写的名称:

  

如果提供了CONSTRAINT symbol 子句, 符号 值如果使用,则在数据库中必须是唯一的。重复的 符号 将导致类似于以下错误:ERROR 1005 (HY000): Can't create table 'test.#sql-211d_3' (errno: 121).如果未给出该子句,或 符号 <{1}}关键字后面不包含,会自动创建约束的名称。