数据库——SQL-SERVER练习(4) 建表及数据完整性
1、 输入下图的语句, 建立学生表STU.
CREATE TABLE STU ( SNO NUMERIC(5) PRIMARY KEY, SNANE CHAR(6) NOT NULL, SSEX CHAR(2) CHECK (SSEX IN ('男','女')), SDEPT CHAR(10) );
2、输入下图的语句, 建立课程表COU.
CREATE TABLE COU ( CNO NUMERIC(2) PRIMARY KEY, CNANE CHAR(10) NOT NULL UNIQUE, CPNO NUMERIC(2) REFERENCES COU(CNO), CCREDIT NUMERIC(2) );
3、输入下图的语句, 建立选课表STUCOU.
CREATE TABLE STUCOU ( SNO NUMERIC(5) REFERENCES STU(SNO), CNO NUMERIC(2) REFERENCES COU(CNO), GRADE NUMERIC(6,2), PRIMARY KEY(SNO,CNO) );
4、 建立供应商表: ST(Sno,Sname,City)
各列数据类型分别为( CHAR(8), CHAR(20), CHAR(20) )
约束:Sno为主码,Sname唯一,City非空
CREATE TABLE ST ( SNO CHAR(8) PRIMARY KEY, SNAME CHAR(20) UNIQUE, CITY CHAR(20) NOT NULL )
5、建立零件表: PT(Pno,Pname,Color)
各列数据类型分别为( CHAR(8), CHAR(20), CHAR(20) )
约束:Pno为主码,Pname非空,Color只能是红,黑,蓝
CREATE TABLE PT ( PNO CHAR(8) PRIMARY KEY, PNAME CHAR(20) NOT NULL, COLOR CHAR(20) CHECK (COLOR IN ('红','黑','蓝')) )
6、建立工程表: JT(Jno,Jname)
各列数据类型分别为( CHAR(8), CHAR(20) )
约束:Jno为主码,Jname唯一
CREATE TABLE JT ( JNO CHAR(8) PRIMARY KEY, JNAME CHAR(20) UNIQUE )
7、建立供应表: SPJT(Sno,Pno,Jno,Qty)
各列数据类型分别为( CHAR(8),CHAR(8),CHAR(8), INT )
约束:(Sno,Pno,Jno)为主码, Qty要大于0
Sno是外码参照ST,Pno是外码参照PT, Jno是外码参照JT
CREATE TABLE SPJT ( SNO CHAR(8) REFERENCES ST(SNO), PNO CHAR(8) REFERENCES PT(PNO), JNO CHAR(8) REFERENCES JT(JNO), QTY INT CHECK (QTY>0), PRIMARY KEY (SNO,PNO,JNO) )
8、查看批处理文件CREATE_TABLES.SQL中对学生三个表的定义(不用执行), 写出以下引起完整性约束报错的操作语句,记录显示的出错信息,并解释操作违反了何种数据完整性?
(1) 执行下面语句:
insert INTO STUDENT(sname, ssex,sage,sdept) values( '刘楠','男',20,'CS');
1).出错信息
2). 对出错信息的解释( 出错原因, 违反了哪种完整性等):
出错原因,主属性为空置,违反了实体完整性。
(2)修改student中数据, 将95001的学号改为99001
1).语句:
UPDATE STUDENT SET SNO='99001' WHERE SNO='95001'
2).出错信息(将出错信息复制至此):
3).对出错信息的解释( 出错原因, 违反了哪种完整性等)::
修改student表中一个元组sno属性,造成修改后sc中的sno在student找不到一个元组,其sno属性值与之相等。
违反了参照完整性。
(3)删除student中95002的元组
1).语句:
DELETE FROM STUDENT WHERE SNO='95002'
2).出错信息:
3).解释:
从student表中删除一个元组的sno属性,造成sc表中的某些元组的sno属性值在表student中找不到一个元组,其sno值与之对应。
违反了参照完整性。
(4)试图在student中插入下面的元组:
( 99001,'赵冬','M',19,'CS')
1).语句:
INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) values( '99001','赵冬','M',19,'CS');
2).出错信息:
3).解释:
在创建student时限制ssex只能是‘男’,或者‘女’。
违反了用户自定义完整性。
(5)删除course中2号课的元组
1).语句:
DELETE FROM COURSE WHERE CNO=2
2).出错信息:
3).解释:
从COURSE表中删除一个元组的CNO属性,造成SC表中的某些元组的CNO属性值在表COURSE中找不到一个元组,其CNO值与之对应。违反了参照完整性。
(6) 在SC中插入一条学号为99990,选1号课,成绩90的学生选课信息
1).语句:
INSERT INTO SC(SNO,CNO,GRADE) VALUES('99990',1,90);
2).出错信息:
3).解释:
SC表中增加一个元组,该元组的SNO属性值在表STUDENT中找不到一个元组,其SNO属性值与之对应。