1.报错1452,如图示:
解决: 这个是在建立外键进行表关联时,关联表有数据导致的,可以通过清空关联表进行解决;
2.报错1215: Cannot add foreign key constraint
这个是两个进行关联的表的关联字段存在不同导致的,差异一般是关联字段在两张表中类型不一样,字段长度不一样,字符编码不一致等,解决办法就是对比两张表的关联字段,将不一致的地方修改成一致;
3.为两张表建立关联,关键键(外键)必须是其中一张表的主键吗?
说明: 不是,只要关联键在其中一张表(主表,关联都是一对一,一对多,这个主表值的就是这个一)中是唯一索引就可以;所以处理方案就是建立唯一索引
navcat 为表建立唯一索引
sqlyog为表建立唯一索引
4. 数据库中表之间已经建立了外键,存在许多表关联,如何清空表数据
直接清空是会报错的,会提示提示Cannot truncate a table referenced in a foreign key constraint,不能清空
解决:
- 删除之前先执行
SET foreign_key_checks = 0关闭外键约束; - 删除完之后再执行
SET foreign_key_checks = 1启动外键约束;
5. 报错:Index column size too large. The maximum column size is 767 bytes.
因定位在字段的长度设置,建表使用的是 utf8mb4 字符集。 这个一个 4 字节字符集
如果说最大限制是 767 bytes。 那么一个 varchar 字段:767/4=191.75。所以我字段设置使用默认的(255),超出了限制;
解决:
1.将索引列的长度改小可以了,字段长度调低,使所有字段字节之和不超过 767 bytes;
2.将 MySQL 的 charset 改为 utf8 ,collation 改为 utf8_general_ci
6. 报错1100: Table ‘xxx’ was not locked with LOCK TABLES的解决方法
解决: 执行 UNLOCK TABLES; ,这个执行可能会花点时间,耐心等候
参考
https://learnku.com/articles/9213/767-bytes-length-restrictions-on-indexing
https://www.jb51.net/article/73611.htm
https://blog.csdn.net/amoscn/article/details/77776511
https://www.jb51.net/article/97424.htm
https://blog.csdn.net/haiross/article/details/50435374