照着书上题例打的, --向学生选课信息表中添加4条纪录 时出错,看了好久没有找到错误
是哪里需要修改呢?
Create Database Student
On Primary
(Name = student_data ,
Filename = 'E:\大学生选课系统\student.mdf' ,
Size = 10MB ,
Maxsize = 100MB ,
Filegrowth = 15%) ,
(Name = student_dat ,
Filename = 'E:\大学生选课系统\student1.ndf' ,
Size = 10MB ,
Maxsize = 100MB ,
Filegrowth = 15%)
Log On
(Name = student_log ,
Filename = 'E:\大学生选课系统\student.ldf' ,
Size = 5MB ,
Maxsize = 25MB ,
Filegrowth = 5MB)
Go
--创建学校信息
Use Student
Go
Create Table stab
(xh char(6) PRIMARY KEY ,
xm varchar(8) NOT NULL ,
xb char(2) NOT NULL DEFAULT'男' ,
csrq date NOT NULL ,
rxrj date NOT NULL ,
ssx varchar(20) NOT NULL ,
bj varchar(20) NOT NULL ,
dh char(11)
)
Go
--创建教师
Use Student
Go
Create Table ttab
(jsh char(4) PRIMARY KEY ,
xm varchar(8) NOT NULL ,
xb char(2) NOT NULL DEFAULT'男' ,
csrq date NOT NULL ,
rjsj date NOT NULL ,
xf varchar(10) ,
zy varchar(10) ,
zc varchar(10) ,
ssx varchar(20) NOT NULL ,
dh char(11)
)
GO
--创建课程表信息
Use Student
Go
Create Table ctab
(kch char(3) PRIMARY KEY ,
kcm varchar(20) NOT NULL UNIQUE ,
xxkch char(3) ,
xf tinyint NOT NULL CHECK(xf>=1 and xf<=5) ,
xs tinyint NOT NULL CHECK(xs>=20 and xs<=120) ,
sf tinyint NOT NULL CHECK(sf>=100 and sf<=300) ,
)
Go
--创建教师课程信息表
Use Student
Go
Create Table tctab
(jsh char(4) NOT NULL REFERENCES ttab(jsh) ,
kch char(3) NOT NULL REFERENCES ctab(kch) ,
cj smallint NOT NULL CHECK(cj>=200 and cj<=1000) ,
PRIMARY KEY(jsh,kch)
)
Go
--创建学生选课信息表
Use Student
Go
Create Table sctab
(xh char(6) NOT NULL REFERENCES stab(xh) ,
kch char(3) NOT NULL ,
jsh char(4) NOT NULL ,
cj decimal(4,1) CHECK(cj>=0 and cj<=100) ,
PRIMARY KEY(xh,kch) ,
FOREIGN KEY(jsh,kch) REFERENCES tctab(jsh,kch) ,
--REFERENCES ttab(jsh) ,REFERENCES ctab(kch) ,
)
Go
--向学生表添加数据
Use Student
Go
Insert Into stab values('100013','张闻天','女','1990-9-8','2010-9-1',
'机械系','10模具','1589766690')
Insert Into stab VALUES('100018','孙晓亮','男','1989-5-28','2009-9-1',
'电气系','09机电','13546780987')
Insert Into stab VALUES ('100017','王菲','女','1991-12-1','2011-9-2',
'计算机系','网络','15897777229')
Go
--向学生选课信息表中添加4条纪录
Use Student
Go
Insert Into sctab values('100013','C1','0001',87)
Insert Into sctab values('100013','C2','0001',65.7)
Insert Into sctab values('100017','C3','0003',98)
Insert Into sctab values('100017','C5','0004',56.8)
Go
/*
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束"FK__sctab__2A4B4B5E"冲突。该冲突发生于数据库"Student",表"dbo.tctab"。
语句已终止。
消息 547,级别 16,状态 0,第 2 行
INSERT 语句与 FOREIGN KEY 约束"FK__sctab__2A4B4B5E"冲突。该冲突发生于数据库"Student",表"dbo.tctab"。
语句已终止。
消息 547,级别 16,状态 0,第 3 行
INSERT 语句与 FOREIGN KEY 约束"FK__sctab__2A4B4B5E"冲突。该冲突发生于数据库"Student",表"dbo.tctab"。
语句已终止。
消息 547,级别 16,状态 0,第 4 行
INSERT 语句与 FOREIGN KEY 约束"FK__sctab__2A4B4B5E"冲突。该冲突发生于数据库"Student",表"dbo.tctab"。
语句已终止。*/
------解决思路----------------------
創建外鍵約束後
不允許sctab表存在tctab表中沒有的數據。
即先向tctab表中插入數據,再向sctab表中插入數據。
------解决思路----------------------
因为你的表sctab引用了表tctab的(jsh,kch)作为外键
因此你试图添加数据到sctab时,必须确保tctab的(jsh,kch)有以下这些组合
'C1','0001'
'C2','0001'
'C3','0003'
'C5','0004'