【发布时间】:2016-02-04 07:00:20
【问题描述】:
我在尝试使用现有表的外键向表中添加列时收到错误消息。以下是两条失败的 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_master_team_id(master_team_id) REFERENCES 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”表上添加列/外键失败。任何帮助都会很棒!谢谢。
【问题讨论】:
-
执行
SHOW CREATE TABLE master_teams并将结果添加到您的问题中。 -
当您尝试运行此更改表时是否存在 master_teams 表?
-
你不能重复使用相同的约束名称
fk_master_team_id。每个约束都需要有一个唯一的名称。 -
@Barmar 我也想到了这个并尝试重命名它,但仍然没有用。此外,我具有相同名称外键的其他表仍然有效。只有这一张表失败了。
标签: mysql foreign-keys