mysql外键创建失败的问题
来源:互联网 发布:怎么降低wifi网络延迟 编辑:程序博客网 时间:2024/06/06 03:43
开发中使用django框架, 连接mysql数据库, 建了些model, 使用python manage.py migrate时报错如下:
django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')
首先使用SHOW ENGINE INNODB STATUS\G; 找到LATEST FOREIGN KEY ERROR项查看, 显示如下:
Error in foreign key constraint of table drmk_work/#sql-285c_158a:
FOREIGN KEY (`hospital_id`) REFERENCES `hospital_hospital` (`objectId`):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
for correct foreign key definition.
然后查看被关联的表,发现被关联的键是primary key。没有问题。
网上找到mysql创建外键失败的原因有以下多种:
1.两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是TINYINT. 你得使用SHOW命令来查看字段的大小,因为一些查询浏览器有时候把int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配,更多关于signed 和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57 。
2.你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是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.ALTER 声明中有语法错误。
根据第6条提示发现两个表的Charset不一样,一个是utf8,一个是latin-1 修改后成功。
- mysql外键创建失败的问题
- mysql外键创建失败的问题
- 关于mysql外键创建失败的问题
- 关于mysql外键创建失败的问题
- mysql外键创建失败的原因
- MySQL创建外键失败,错误信息1005
- MySQL笔记-外键创建失败总结
- Navicat for Mysql外键创建失败
- mysql创建外键失败原有总结
- MySQL 关于建立外键失败的问题
- CreateWindow创建失败的问题
- MySQL外键创建失败1005原因总结
- MySQL用户权限导致的创建Trigger失败
- MySQL中表创建失败的原因之一
- MySQL用户权限导致的创建Trigger失败
- mysql 创建用户失败
- mysql 创建表失败
- 关于创建socket失败的问题
- TMS320C66x学习笔记之通用并行端口uPP
- fork之后子进程到底复制了父进程什么
- BLUE 评价指标总结
- 继上一篇 对象、for in、
- JsonView插件的使用
- mysql外键创建失败的问题
- tensorflow:name&variable scope
- 学了2天的Python,自己写了个简单的爬虫,可是爬虫有什么用呢?
- Makefile的编写规则
- 【深入Java虚拟机】之一:Javac编译与JIT编译
- android 底部导航总结
- leetcode69---Sqrt(x)
- Middleware 中间件
- win7,win10右键添加“获取管理员的所有权限”的菜单