意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

mysql创建外键失败原有总结

来源:恒创科技 编辑:恒创科技编辑部
2023-12-22 01:16:59


外键创建问题总结

问题1: 创建的表的编码必须设置为innodb(sql输入完全没反应就是表的引擎错了)


mysql创建外键失败原有总结

问题2 创建的外键的id必须为其创建索引,主表和从表都是

问题3 创建的外键的字段主表和从表必须一致

我的创建外键sql实例:mysql> alter table article add foreign key article_articleid(articleid) referenc
es user(userid);

创建后查看表:show create table article;


查看一下表的编码


show create table t_user_friend;


发现其是latin1编码的,需将其转成utf8


命令如下


alter table t_user_friend convert to character set utf8;



当然还可以设置mysql的客户端和服务器的默认编码


vi /etc/mysql/my.conf



default-character-set=utf8





character-set-server=utf8


collaction-server = utf8-greneral-cli



创建外键出现105错误,如下图:

MySQL出现1005 - Can't create table 'zxct.#sql-1acc_a' (errno: 150)解决

mysql创建外键失败原有总结_字段


在MySQL​中创建外键时,经常会遇到问题而失败,这是因为mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因。

1. 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:​​http://www.verysimple.com/blog/?p=57​​

2. 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。如果其中一个不是primary key的话,你必须先为它创建一个索引。

3. 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。

4. 外键的名字不能重复。你应该检查你的数据库​以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

5. 你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。

6. 请确定你的Charset和Collate选项在表级和字段级上的一致。

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

8. ALTER声明中有语法错误

解决:删除引用表,重新创建。


StackOverFlow上面对105错误的解释:


If you re-create a table that was dropped, it must have a definitionthat conforms to the foreign key constraints referencing it. It must have theright column names and types, and it must have indexes on the referenced keys,as stated earlier. If these are not satisfied,mysqlreturns error number 1005and refers to error 150 in the error message.



上一篇: mysql 地区数据表 下一篇: 数据库的唯一标示符(ID)的选择