INSERT 语句与 FOREIGN KEY SAME TABLE 约束"FK__Course__Cpno__267ABA7A"冲突。该冲突发生于数据库"st",表"dbo.Course", column 'Cno'。
在导入数据的时候,我们可能会遇到如题的问题。
其实最为关键的一点就是没有完全理解外键究竟是什么。
就拿下面的语句来说(就是对应本文标题的内容)
Create Table Course
(Cno char(4) Primary key,
Cname Char(40) NOT NULL,
Cpno Char(4),
Ccredit smallint,
Foreign key(Cpno) Refreences Course(Cno)
);
最为关键的就是这句
他是定义表级完整性约束条件,Cpno是外码,被参照表是本身,被参照列是Cno。
这句话就是我们犯错的原因,拿我老师举的例子来说:我们要娶老婆,那必须得是别人家先要有一个女儿,我们才能娶的到。
就像下面犯错的插入数据的语句:
我们要插入的外码Cpno的值为5,其参照列是Cno,但是我们可能此时此刻的表中列Cno并没有值为5的数据可供Cpno参照,所以产生了报错。
分析下来我们的修改方法也很简单,相信看到这里的你们已经想到了。那就是先插入Cpno为NULL的数据就行,然后按照已经有的Cno的值,对应Cpno插入就行了。