这个alter table命令有什么问题:
ALTER TABLE `lp`
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , ,
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;
如果我放弃
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...
它的工作,
我得到的错误是:
Error Code : 1005
Can't create table '..' (errno: 121)
如何在同一个字段中添加FOREIGN KEY和INDEX ?
我尝试分为2个查询,首先添加INDEX,然后添加FOREIGN KEY,添加索引但第二个查询不起作用!
当我更改外键的名称(例如:'fk_2')并尝试运行它时出现错误:错误代码:1452无法添加或更新子行:外键约束失败
答案 0 :(得分:5)
首先创建索引,然后创建外键约束。 MySQL需要一个索引来创建外键,这就是你必须首先创建索引的原因。也可以使用单独的陈述。
答案 1 :(得分:1)
我确实遇到了同样的问题。
我发现如果数据库中已存在另一个具有完全相同名称的外键,则无法添加外键。即使其他外键位于不同的表中。
ERROR 1005(HY000):无法创建表'。/ MyDB / #sql-e4a_c715.frm'(错误号:121) 如上所述,如果您尝试使用已在其他位置使用过的名称添加约束,您将收到此消息。
(取自here)
所以只需将其重命名为随机的内容,以检查我是否正确..
答案 2 :(得分:0)
使用“manage.py sqlall”命令组合来自N Django应用程序的模式DDL后出现此错误。
我发现MySQL的DDL要求语句按此顺序按种类分组。具体来说,所有ALTER TABLE ... ADD ... FOREIGN KEY ... 必须最后出现,否则MySQL会引发该错误。