繁体   English   中英

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

[英]MYSQL alter table - add INDEX + FOREIGN KEY give 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)

如何在同一字段上添加外键和索引

更新:

我尝试分离为2个查询,首先添加INDEX,然后添加FOREIGN KEY,添加索引,但是第二个查询不起作用!

当我更改外键的名称(例如:'fk_2')并尝试运行它时,出现错误:错误代码:1452无法添加或更新子行:外键约束失败

首先创建索引,然后创建外键约束。 MySQL需要一个索引来创建外键,这就是为什么必须首先创建索引的原因。 也使用单独的语句。

我完全有同样的问题。

我发现,如果数据库中已经存在另一个具有完全相同名称的外键,则无法添加外键。 即使那个其他外键在另一个表上。

错误1005(HY000):无法创建表'./MyDB/#sql-e4a_c715.frm'(errno:121)如上所述,如果您尝试添加名称为已经在其他地方使用了。

(从这里拍摄)

因此,只需将其重命名为随机值即可检查我是否正确。

使用“ manage.py sqlall”命令从N个Django应用程序组合模式DDL之后,出现此错误。

我发现,MySQL的DDL要求语句通过一种顺序分组。 具体来说,所有ALTER TABLE ... ADD ... FOREIGN KEY ... 必须最后出现,否则MySQL会引发该错误。

  1. 创建表...
  2. 创建索引...
  3. ALTER TABLE table_name添加约束名称FOREIGN KEY ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM