由于表结构更改,使用新建表,现有部分表需要更改外键,将引用更改到新建表的相应字段。在更改过程中,部分表出现如下错误提示:

ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 '' 冲突。该冲突发生于数据库 “***”,表 “***”, column “***”。

反复查看后,包括字段类型、长度等完全一致。不得其解,在网上找了下,发现有如下文章[1]提示:

根源: XXX表有数据

解决:删掉XXX表的数据再执行sql语句

恍然大悟,查看引用表数据与被引用表数据做比较,才发现,原来是相应字段数据不一致的问题。即引用表中的相应字段数据,在被引用表中并不存在,无法建立实际上的外键关系,这是引用完整性的要求。早在读书时就学到的东西,今天居然忘记了。看来,知识只有在用了之后才属于自己。

此外,在主次表引用设置后,也可能会出现正面的情况。即主表中的外键,在次表中已经失效,或不存在。

如表A:

aid aname
1 Lucy
2 Lily
3 Kimi

表B引用表A的aid作为外键

bcode aid(FK from A) bvalue
001 1 bone
002 2 btwo
003 5 bthree

由于表B中的“aid”字段引用了表A的“aid”,因此,如果此时想修改表B的定义结构,即会出现文章最开始出错的信息,修改失败。就是因为表B中的第三条数据,引用的“aid”为“5”的那条记录,因为表A中不存在这条记录,修改表之前的验证无法通过。只有删除了这条数据之后,再次修改表B才会成功。

PS:正常情况下,如何使用了“强制外键约束”,则不会出现上面的问题。因为存在外键引用,是无法删除被引用表某些数据的。如果将“强制外键约束”选项是“否”。则可以删除相应的数据。


参考文献:

[1] ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 '' 冲突 ,大尾巴狼专栏

最新文章

  1. 一段SQL
  2. pyqt 过滤事件
  3. Logger的等级输出
  4. C++类模板
  5. CHM文件无法查看内容解决办法
  6. 11、WebView 使用总结
  7. struts2+spring3+hibernate3+mysql简单登录实现
  8. MyBatis基础:MyBatis关联查询(4)
  9. Mockito框架入门教程(一)
  10. ESP8266 RTOS SDK编译环境搭建
  11. HBase篇(2)-数据模型与操作
  12. MT【213】二次曲线系方程
  13. P3747 相逢是问候 欧拉定理+线段树
  14. Python 爬虫(二十五) Cookie的处理--cookielib库的使用
  15. Remote 桌面的win2003 servre端设定
  16. Photoshop图层混合模式计算公式大全
  17. 03 - django简介
  18. 让easyui的datagrid的field支持属性的子属性(field.childfield)
  19. 存储过程中拼写sql并执行
  20. xsd文件记录

热门文章

  1. Bob Waters - Twenty Years
  2. 使用URLConnection发送http请求实现简单爬虫(可以配置代理)
  3. 【CF710F】String Set Queries(二进制分组,AC自动机)
  4. 【BZOJ2962】序列操作(线段树)
  5. as, idea 出现 Gradle's dependency cache may be corrupt 错误分析
  6. LGP4577【JSOI2018】战争
  7. Maven问题合集
  8. 《剑指offer》— JavaScript(15)反转链表
  9. composer安装第三方库出现需要认证信息等原因
  10. 清除.svn文件(windows & linux)