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

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. djangoORM 修改表结构/字段/外键操作

    Django支持修改表结构 把max_length=64 改为60 再执行一遍 python manage.py makemigrations python manage.py migrate 如果是 ...

  2. [转载] Can't create table './store/#sql-b2c_1a.frm' (errno: 150)和sql execution error #1452添加外键时错误解决方法

    Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法 错误原因有四: 1.外键的引用类型不一样,主键是int外键是char 2.找 ...

  3. mysql为表添加外键完成性约束 报错Can't create table 'sfkbbs.#sql-513_25' (errno: 150)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtkAAAAyCAIAAAAGM1ChAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu

  4. Oracle表中添加外键约束

    添加主键约束: ALTER TABLE GA_AIRLINE ADD CONSTRAINT PK_AIRLINE_ID PRIMARY KEY(AIRLINE_ID); 有三种形式的外键约束: 1.普 ...

  5. code first 添加外键时,与原有的数据冲突ALTER TABLE 语句与 FOREIGN KEY 约束"FK_XXXXX"冲突

    问题的原因是新增的外键字段没有默认值,造成的,有很多方法可以解决,我这里通过修改生成的迁移文件,设定为可空,或者设置默认值即可.具体看情况使用.

  6. mysql 添加外键时 error 150 问题总汇

    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上, ...

  7. mysql处理添加外键时 error 150 问题

    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上, ...

  8. 解决code first Migration 增加外键时出现错误的问题

    先上模型 Comment public class Comment { [Key] public int CommentId { get; set; } [Required] public int S ...

  9. MySQL添加外键报错 - referencing column 'xx' and referenced column 'xx' in foreign key constraint 'xx' are incompatible

    MySQL给两个表添加外键时,报错 翻译意思是:外键约束“xx”中的引用列“xx”和引用列“xx”不兼容 说明两个表关联的列数据类型不一致,比如:varchar 与 int,或者 int无符号 与 i ...

随机推荐

  1. 一些程序OEP入口特征

    声明: 1.本文中使用的例子来源于吾爱破解的官方教程第一课中的无壳例子,本人利用空闲时间挨个进行查看并截图纪录下来 2.欢迎补充讨论 一些程序OEP入口特征 一.       AMS程序 1.载入PE ...

  2. python基础3--字符串

    字符串 1.大小写转换 >>> name 'bigberg' >>> name.capitalize() # 首字母大写 'Bigberg' >>> ...

  3. python【数据类型:字典】

    字典的定义 infos = {'name':'张晓红','sex':'女','address':'上海','age':18} stus = {"name":"张三&quo ...

  4. Docker login报错一例

    在一台ubuntu 18.04上执行docker login 登录镜像仓库的时候,抛出如下异常: error getting credentials - err: exit status 1, out ...

  5. K8S调度之Taints and Tolerations

    Taints和Tolerations(污点和容忍) 在<K8S之节点亲和性>中,我们说到的的NodeAffinity节点亲和性,是在pod上定义的一种属性,使得Pod能够被调度到某些nod ...

  6. Go_19: Golang 中错误与异常需要重新认识

    如何进行错误处理,这是一个Go程序员之间,特别是一些新的Go程序员,会经常讨论的问题.讨论到最后往往由于以下代码的多次出现而变成了抱怨. if err != nil { return err } 我们 ...

  7. [Luogu 2169] 正则表达式

    [Luogu 2169] 正则表达式 感谢 0xis 推题. 记忆中很久没有过一遍写过一题了- 别被题目名称蒙骗!这不是正则表达式题目!和字符(串)处理一点关系都没有!这是个图论题啊喂! 题都没急,C ...

  8. python sqlite3 入门 (视频讲座)

    python sqlite3 入门 (视频讲座) an SQLite mini-series! - Simple Databases with Python 播放列表: YouTube https:/ ...

  9. Swing教程

    //用多线程刷新状态 new Thread(new Runnable(){ @Override public void run() { try { for(int i=0;i<1000;i++) ...

  10. Windows系统环境下Solr之Java实战(一)搭建solr服务器并配置IK分词

    搭建solr服务器 1.下载地址:http://archive.apache.org/dist/lucene/solr/ 2.将D:\JavaWeb\Solr\solr-6.2.0\server\so ...