2

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

4

3 回答 3

5

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

于 2010-08-11T06:32:02.393 回答
1

我有同样的问题。

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

ERROR 1005 (HY000): Can't create table './MyDB/#sql-e4a_c715.frm' (errno: 121) 如上所述,如果您尝试添加名称为已经在其他地方使用过。

(取自这里

所以只需将其重命名为随机名称以检查我是否正确..

于 2011-02-24T21:03:14.170 回答
0

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

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

  1. 创建表...
  2. 创建索引...
  3. ALTER TABLE table_name 添加约束名称 FOREIGN KEY ...
于 2014-03-06T18:25:44.033 回答