首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL alter添加索引+外键给错误1005

问MYSQL alter添加索引+外键给错误1005
EN

Stack Overflow用户
提问于 2010-08-11 06:27:58
回答 3查看 6.2K关注 0票数 2

这个alter命令有什么问题:

代码语言:javascript
复制
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) ;

如果我不接电话

代码语言:javascript
复制
  ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...

它的工作,

我得到的错误是:

代码语言:javascript
复制
Error Code : 1005
Can't create table '..' (errno: 121)

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

更新:

我尝试将两个查询分开,首先添加索引,然后添加外键,然后添加索引,但第二个查询不工作!

当我更改外键的名称(如:'fk_2')并尝试运行它时,我得到一个错误: error代码: 1452不能添加或更新子行:外键约束失败

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-11 06:32:02

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

票数 5
EN

Stack Overflow用户

发布于 2011-02-24 21:03:14

我也有同样的问题。

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

错误1005 (HY000):无法创建表'./MyDB/#sql-e4a_c715.frm‘(errno: 121),如果您试图添加一个名称已经在其他地方使用的约束,您将得到此消息。

(取自这里)

所以把它重命名为随机的东西来检查我是否正确..。

票数 1
EN

Stack Overflow用户

发布于 2014-03-06 18:25:44

在使用"manage.py sqlall“命令组合N Django应用程序的模式DDL后,我得到了这个错误。

我发现MySQL的DDL要求语句按照这个顺序按类分组。特别是,所有的改变表..。加上..。外键.必须是最后一个,否则MySQL会引发该错误。

  1. 创建桌子..。
  2. 创建索引。
  3. 修改表table_name添加约束名外键.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3455805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档