INSERT 语句与 FOREIGN KEY 约束“FK__SC__CID__4316F928“冲突。该冲突发生于数据库“EDUC“,表“dbo.Course“, column ‘CID‘。语句已终止

在学习SQL时,作者在创建并填充数据到SC表时遇到了外键约束错误。SC表的CID引用了Course表的主键CID,但插入的CID值在Course表中不存在。解决方案包括:1)先在主键表中添加对应数据;2)临时删除外键约束;3)直接修改SC表的外键值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我现在刚开始学Sql的时候,在写实训报告时遇到的一个问题,大概是下面这样的。

(使用的软件:SQL Server Management Studio Management Studio 19)

三个表的创建:

1.student表的创建:

create table student

(

SID char(4) not null primary key,   /*SID为student表的主键*/

Sname nvarchar(255) not null,   /*Sname不能为空值*/

Sex nchar(1) not null default '男', /*Sex不能为空值,如果没有赋值,默认性别为‘男’*/

Specialty nvarchar(255),

AScorse numeric(5,1) not null,

Birthdate datetime not null,

classID char(7) foreign key(classID) references class(classID)  /*classID为外键*/

)

2.Course表的创建:

create table Course

(

CID char(7) not null primary key,  /*CID为Course表的主键*/

Cname nvarchar(255) not null,

Cridet numeric(3,1) not null,

KCLB nvarchar(255) not null,

ISBN char(13) foreign key(ISBN) references TextBook(ISBN)  /*ISBN为外键*/

)

3.SC表的创建:

create table SC

(

SID char(4) not null foreign key(SID) references student(SID),   /*SID为外键*/

CID char(7) not null foreign key(CID) references Course(CID),   /*CID为外键*/

Scourse numeric(4,1) not null,

primary key(SID,CID)     /*SID+CID为SC表的主键。

                                        注意不是SID和CID为主键,因为primary key在一个表中只能有一个!*/

)

当我添加数据的时候,出现下面的错误:

 

【问题起源:】

这是Coures表中的数据,其中CID是Coures表的主键:

 而我输入在SC表中的数据为:

由此可以看见,SC表中的CID列的值(CID是SC表中的外键)并不是Course表中CID的值(Coures表中的CID是主键) ,因此而报错

--【解析理论】:
--外键约束,比如B表存在一个字段b,有外键约束,引用于A表的主键a,那么在向B表插入数据------时,字段b必须为A表中a已经存在的值,
--如过向b中存放一个a中没有的值,则会报违反外键约束。

(来自博主gocpplua的文章)

我思考了一会大概知道是因为主键和外键的关系,但是具体还不太清楚,我就到CSDN中寻求答案,我发现了几个博主的解答,他们只有一种情况,我在这总和他们的解决方法:

--【解决1】:
--在主键的表中添加数据,使得外键这个表能够找到主键表的内容
--insert into 主键表 values(val1,val2....);
--eg:
--insert into Corse values('c300331',.....);
--【解决2】:
--消除约束
--alter table 主键表
--dorp constraint 约束名;
--eg:
--alter table Course 
--drop constraint FK__SC__CID__4316F928;
--【解决3】
--直接修改外键表中的值,使其等于主键表中含有的值

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值