MYSQL alter table - 添加INDEX + FOREIGN KEY给出错误1005

时间:2010-08-11 06:27:59

标签: mysql foreign-keys indexing alter-table mysql-error-1005

这个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无法添加或更新子行:外键约束失败

3 个答案:

答案 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会引发该错误。

  1. 创建表...
  2. 创建指数......
  3. ALTER TABLE table_name ADD CONSTRAINT name FOREIGN KEY ...