mysql数据库创建外键时报MySQL ERROR:1005 Can't create table (erron:150)错误

产生错误的原因:

1、两个字段的类型或者大小不严格匹配,例如:如果一个是INT(10),那么外键也必须设置成INT(10),而不是INT(11)也不能是TINYINT。可以使用show命令查看字段的大小,因为一些查询浏览器有时候把INT(10)和INT(11)都显示为INTEGER。另外,还必须确认两个字段是否都是SIGNED或UNSIGNED,这两个字段必须严格一直匹配。

2、当试图引用其中的一个外键没有建立起索引,或者不是primary key,就必须为此外键创建索引。

3、外键的名字是一个已经存在的键值了,应该确保外键名字唯一,或者在键名后面随机添加几个字符测试是否是这个原因。

4、其中一个或者两个表示MYISAM引擎的表,若想使用外键约束,必须是INNODB引擎(如果两个表都是MYISAM引擎,此错误根本不会产生,但也不会产生外键)。

5、可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。可以通过修改cascade的属性值或把字段属性设置成allow null 来搞定此bug。

6、请确定你的charset和collate选项在表级和字段级上一致。

7、可能为外键设置了一个默认值,如default=0.

8、在这个关系里面,其中一个字段是一个混合键值中的一个,他没有自己独立的索引,这时必须为他创建一个独立的索引。

9、ALERT声明中的错误。

10、要连接的两个表的编码格式不同。


参考百度文档:https://wenku.baidu.com/view/7a0a1f1b10a6f524ccbf85e6.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值