数据库实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:数据完整性
1、实验目的
(1)了解SQL Serer数据库系统中数据完整性控制的基本方法
(2)熟练掌握常用CREATE 或ALTER 在创建或修改表时设置约束
(3)了解触发器的机制和使用
(4)验证数据库系统数据完整性控制
2、实验平台
使用SQL Server数据库管理系统提供的SSMS和查询编辑器。
3 实验内容及要求
结合ST数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束、检查约束、非空约束等,掌握各约束的定义方法。
设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。
设计一些示例数据,验证完整性检查机制。
要求包括如下方面的内容:
3.1 使用SQL语句设置约束
使用CREATE或ALTER语句完成如下的操作,包括:
1.设置各表的主键约束
2.设置相关表的外键
3. 设置相关属性的非空约束、默认值约束、唯一约束
4. 设置相关属性的CHECK约束
3.2 使用触发器
创建一个触发器,实现如下的完整性约束:
● 当向SC 表中插入一行数据时,自动将学分累加到总学分中。 ● 记录修改学分的操作。
3.4 检查约束和触发器
分别向相关表插入若干条记录,检查你设置的完整性约束是否有效:
1. 插入若干条包含正确数据的记录,检查插入情况
2. 分别针对设置的各个约束,插入违反约束的数据,检查操作能否进行 3. 向SC 表插入若干行数据,检查触发器能否实现其数据一致性功能。
4 实验报告
要求写出实验的基本过程。解释操作过程中出现的现象。
SC Student
参考示例:
建立一个学生选课数据库,熟悉约束及触发器的使用方法。
一、声明完整性约束
创建学生选课数据库TEST,包括三个基本表,其中Student表保存学生基本信息,Course 表保存课程信息,SC表保存学生选课信息,其结构如下表:
表1. Student表结构
表2. Course表结构
表3. SC表结构
1.创建基本表及约束
(1)创建Student表
CREATE TABLE Student
(Sno CHAR(8)PRIMARY KEY,
Sname CHAR(8)NOT NULL,
Ssex CHAR(2) CHECK( Ssex in ('男','女')),
Sage SMALLINT,
Sdept CHAR(20),
Sclass CHAR(4)NOT NULL,
Stotal smallint DEFAULT 0
);
●掌握主键约束、非空约束、CHECK约束、默认值的定义格式。
(2)创建Course表
CREATE TABLE Course
(Cno CHAR(4)CONSTRAINT FK_Course PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4) ,
Ccredit SMALLINT
);
(3)创建SC表
CREATE TABLE SC
(Sno CHAR(8)FOREIGN KEY (Sno)REFERENCES Student(Sno),
Cno CHAR(4),
Grade SMALLINT CONSTRAINT SC_CHECK CHECK(Grade>0 AND Grade<100), PRIMARY KEY (Sno,Cno),
CONSTRAINT FK_SC FOREIGN KEY (Cno)REFERENCES Course(Cno) );
●掌握多个属性的主键约束、外键约束、CHECK约束的定义格式。
●掌握约束的命名方式。
(4)检查表是否创建成功。
2.插入数据
将如下表格中的数据分别插入到数据库相应的表中:
表4.学生基本信息表
表5.课程信息表
表6.学生选课信息表
(1)插入学生信息到Student表
INSERT INTO Student VALUES('20100001','李勇','男',20,'CS','1001',0)
INSERT INTO Student VALUES('20100002','刘晨','女',19,'CS','1001',0)
请写出插入其余行的插入语句,并插入数据。
(2)插入到课程信息到Course表
INSERT INTO Course(Cno,Cname,Cpno,Ccredit)VALUES('1','数据库系统原理','5',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit)VALUES('2','高等数学',null,2)
请写出插入其余行的插入语句,并插入数据。
(3)插入到SC表
INSERT INTO SC VALUES('20100001','1',92)
INSERT INTO SC VALUES('20100002','2',80)
请写出插入其余行的插入语句,并运行。
(4)检查插入到表中的数据
3.修改约束
对数据库中已经存在的表,可对其增加约束或修改已存在的约束:
(1)添加约束
ALTER TABLE Course ADD UNIQUE(Cname)
ALTER TABLE Course ADD FOREIGN KEY (Cpno)REFERENCES Course(Cno)
●掌握如何添加约束
●掌握如何声明唯一约束
(2)修改约束
ALTER TABLE SC DROP CONSTRAINT SC_CHECK
ALTER TABLE SC ADD CONSTRAINT SC_CHECK CHECK(Grade>=0 AND Grade<=100)
●掌握如何修改约束
●理解命名约束的优点
二、检查完整性约束
通过修改数据库中的数据检查完整性约束条件的作用。
1.检查主键约束
(1)执行下面的语句修改Student表,观察语句能否正确运行,解释为什么?
INSERT INTO Student VALUES('20100101','李斌','男',20,'CS','1001',0)
INSERT INTO Student VALUES('20100001','李斌','男',20,'CS','1001',0)
UPDATE Student SET Sno='20100021'WHERE Sname='张立'
(2)执行下面的语句修改SC表,观察语句能否正确运行,解释为什么?
INSERT INTO SC VALUES('20100001','1',78)
INSERT INTO SC VALUES('20100001',null,78)
2.检查唯一约束
执行下面的语句修改Course表,观察语句能否正确运行,解释为什么?
INSERT INTO Course VALUES('8','JAVA',7, 3)
INSERT INTO Course VALUES('9','数据结构',7, 3)