一、实验目的
1、掌握SQL Server的6 类约束:NOT NULL、PRIMARY KEY、CHECK、FOREIGN KEY、DEFAULT 和UNIQUE 的使用方法,在创建表时用相应的约束描述实体完整性、参照完整性和用户定义完整性。
2、掌握增加和删除约束的方法。
二、实验内容与步骤
1、完成教材实验9实验内容1、2、3。
语句:
USE StudentCourse1
GO
CREATE TABLE Student
(学号 CHAR(6) PRIMARY KEY,
姓名 CHAR(12) NOT NULL CONSTRAINT name_unique UNIQUE,
专业名 VARCHAR(20),
性别 CHAR(2) NOT NULL CONSTRAINT gen_Check CHECK(性别='男' OR 性别='女'),
出生时间 SMALLDATETIME,
总学分 INT CONSTRAINT tot_Check CHECK(总学分>=0),
备注 TEXT
)
GO
CREATE TABLE Course
(课程号 CHAR(4) PRIMARY KEY,
课程名 VARCHAR(40) NOT NULL,
开课学期 INT CONSTRAINT Sem_Check CHECK(开课学期 BETWEEN 1 AND 8),
学时 INT CONSTRAINT Tm_Check CHECK(学时>=0),
学分 INT CONSTRAINT Score_Check CHECK(学分>=0)
)
GO
CREATE TABLE StuCourse
(学号 CHAR(6) NOT NULL,
课程号 CHAR(4) NOT NULL,
成绩 INT CONSTRAINT Grade_Check CHECK (成绩>=0),
PRIMARY KEY(学号,课程号),
FOREIGN KEY(学号) REFERENCES Student(学号),
FOREIGN KEY(课程号) REFERENCES Course(课程号)
)
GO
结果:
2、对6 类数据约束进行验证
实体完整性:
(1)PRIMARY KEY
用insert语句分别对Student表(或者Course表)插入三条记录(具体数据自行设计),观察执行结果。
Student表
- 主码重复的记录
语句:
INSERT INTO Student
VALUES('070101','丁二平','计算机科学与技术','男','1985-5-30',80,'三好生')
结果:
②主码为空的记录
语句:
INSERT INTO Student
VALUES(NULL,'丁二平','计算机科学与技术','男','1985-5-30',80,'三好生')
结果:
③满足主码约束的记录
语句:
INSERT INTO Student
VALUES('070100','丁二平','计算机科学与技术','男','1985-5-30',80,'三好生')
结果:
参照完整性:
(2)FOREIGN KEY
用insert语句(或者update语句)对StuCourse表进行更新操作(具体数据自行举例),观察执行结果。
StuCourse表:
①外码为null的情况
语句:
INSERT INTO StuCourse
VALUES(NULL,'1001',75)
结果:
②外码取值不在被参照主码的取值范围内的情况
语句:
INSERT INTO StuCourse
VALUES('070001','1001',100)
结果:
③外码取值在被参照主码的取值范围内的情况
语句:
INSERT INTO StuCourse
VALUES('070101','3001',100)
结果:
用户定义完整性:
下面4类约束可以选择某个表中带有对应约束的列,使用insert语句(或者update语句)进行更新操作,观察执行结果。
(3)NOT NULL
①违反约束的情况
语句:
INSERT INTO Course
VALUES('1000',NULL,1,64,3)
结果:
②满足约束的情况
语句:
INSERT INTO Course
VALUES('1000','数据库',1,64,3)
结果:
(4)UNIQUE
①违反约束的情况
语句:
INSERT INTO Student
VALUES('070203','朱江','电子信息工程','男','1988-12-30',80,NULL)
结果:
②满足约束的情况
语句:
INSERT INTO Student
VALUES('070200','dddd','电子信息工程','男','1989-7-1',64,'多次获奖学金')
结果:
(5)DEFAULT
①给定具体属性值的情况
语句:
INSERT INTO Course
VALUES('1004','数据库',1,64,3)
结果:
②没有给定具体属性值的情况
语句:
INSERT INTO Course(课程号,课程名,开课学期,学时)
VALUES('1005','计算机组成原理',2,64)
结果:
(6)CHECK
①违反约束的情况
语句:
INSERT INTO Student
VALUES('070301','朱平','计算机科学与技术','0','1990-1-10',64,NULL)
结果:
②满足约束的情况
语句:
INSERT INTO Student
VALUES('070301','朱平','计算机科学与技术','男','1990-1-10',64,NULL)
结果:
3、完成思考与练习1、2。
提示:增加默认值约束语法格式:
alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称
(1)语句:
ALTER TABLE Course ADD CONSTRAINT Xuefen_default DEFAULT 2 FOR 学分
结果:
(2)SQL语句如下:
ALTER TABLE StuCourse
DROP CONSTRAINT Grade_Check
GO
ALTER TABLE StuCourse
ADD CONSTRAINT Grade_Check
CHECK(成绩>=0 AND 成绩<=100)
GO
结果:
这篇实验报告详细介绍了如何使用SQL Server实现数据完整性,包括NOT NULL、PRIMARY KEY、CHECK、FOREIGN KEY、DEFAULT和UNIQUE约束的创建与应用。通过实例展示了违反和满足这些约束的插入和更新操作,以及如何增加和删除约束。
2231

被折叠的 条评论
为什么被折叠?



