我尝试使用外键将列添加到现有表时收到错误。以下是两个失败的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'表确实添加了列/外键失败。任何帮助都会很棒!感谢。
答案 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}}关键字后面不包含,会自动创建约束的名称。