网管程序员论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2916|回复: 0

MYSQL ON DELETE CASCADE 设置级联删除关系失败的解决方法--mysql [Err] 1005

[复制链接]
发表于 2013-2-25 11:48:09 | 显示全部楼层 |阅读模式
ALTER TABLE ta ADD CONSTRAINT MAIN_ID_CONS FOREIGN KEY (id) REFERENCES tb(id) ON DELETE CASCADE

mysql [Err] 1005 - Can't create table '.\ \#sql-***.frm' (errno: 150)


在MYSQL中创建外键时,如果得到这个错误,是非常令人迷惑和沮丧的。要命的是:这个错误被报告为bug已经多年了,实际上错误的提示信息是误导性的。Can't create table?我只是要创建一个外键啊,怎么成table了?无论你有多么疑惑和沮丧或崩溃,问题总还是要解决的。以下这些情况都能导致这个问题:

1、两个字段的数据类型或长度不一致。例如,一个是int(10),而另一个却是int(11)或varchar(10)。你还要检查,是不是一个字段选择了无符号,而另一个没有选择,我自己就遇到了这样的问题。总之,两个表和字段的编码、设置应该完全一致。

2、为了使用外键,表必须都是InnoDB。

3、指定了删除时字段值设为NULL,但是该字段被设置为NOT NULL。Mysql无法解决这个问题,你只能修改其中一个地方的设置了。

4、外键列设置了默认值为0也会出现这个错误。


5、使用的主表字段不是主键,如果你不能把主表字段设置为主键,那么可以为其创建一个索引。

6、使用的主表的字段是一个组合的一部分(复合主键),并且这个字段没有它自己的索引。如果是这个问题,那么就为这个字段创建一个单独的索引吧。

7、外键的名字重复了。一个数据库中外键名字必须是唯一的。试着添加一些随机字符看看能不能创建成功。

8、外键名称的长度超过了最大限制64个字符。

9、ALTER语句语法错了,从表表名写错了,从表字段写错了,主表表名写错了,主表字段写错了等等。


最后,祝你成功!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|最新更新|网管程序员社区 鄂ICP备11008024号-3

GMT+8, 2019-9-20 11:38 , Processed in 0.124800 second(s), 26 queries .

Powered by 网管论坛

© 2001-2018 www.027safe.com Inc.

快速回复 返回顶部 返回列表