当前位置:文档之家› 数据库_实验报告3

数据库_实验报告3

本科实验报告课程名称:数据库系统原理实验项目:数据完整性实验地点:致远楼B503专业班级:软件1202班学号:2012004997 学生姓名:赵明晶指导教师:安建成2014年4月25 日一目的与要求(1)了解 SQL Serer 数据库系统中数据完整性控制的基本方法(2)熟练掌握常用 CREATE 或 ALTER 在创建或修改表时设置约束(3)了解触发器的机制和使用(4)验证数据库系统数据完整性控制二实验设备与环境Windows XP 或者 Windows 2003 Server。

使用 SQL Server 数据库管理系统提供的 SSMS 和查询编辑器。

三实验内容、实验记录及实验结果与分析结合 ST 数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约束、检查约束、非空约束等,掌握各约束的定义方法。

设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。

设计一些示例数据,验证完整性检查机制。

要求包括如下方面的内容:3.1 使用 SQL 语句设置约束使用 CREATE 或 ALTER 语句完成如下的操作,包括:1.设置各表的主键约束2.设置相关表的外键3. 设置相关属性的非空约束、默认值约束、唯一约束4. 设置相关属性的 CHECK 约束3.2 使用触发器创建一个触发器,实现如下的完整性约束;当向 SC 表中插入一行数据时,自动将学分累加到总学分中。

记录修改学分的操作。

3.4 检查约束和触发器分向相关表插入若干条记录,检查你设置的完整性约束是否有效:1.插入若干条包正确数据的记录,检查插入情况2.分针对设置的各个约束,插入违反约束的数据,检查操作能否进行3.向 SC 表插入若干行数据,检查触发器能否实现其数据一致性功能。

4实验报告要求写出实验的基本过程。

解释操作过程中出现的现象。

参考示例参参考考示示例例参考示例::::建立一个学生选课数据库,熟悉约束及触发器的使用方法。

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 PK_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));(4)检查表是否创建成功。

2插入数据(1)插入学生信息到Student表INSERT INTO Student V ALUES('20100001','李勇','男',20,'CS','1001',0)INSERT INTO Student V ALUES('20100002','刘晨','女',19,'CS','1001',0)请写出插入其余行的插入语句,并插入数据。

INSERT INTO Student V ALUES('20100021',’王敏’,’女’,18,’MA’,’1002’,0)INSERT INTO Student V ALUES('20100031',’张立’,男’,19,’IS’,’1003’,0)INSERT INTO Student V ALUES('20100003',’刘洋’,’女’,NULL,NULL,’1001’,0) INSERT INTO Student V ALUES('20100010',’赵斌’,’男’,19,’IS’,’1005’,0)INSERT INTO Student V ALUES('20100022',’张明明’,’男’,19,’CS’,’1002’,0)(2)插入到课程信息到Course表INSERT INTO Course(Cno,Cname,Cpno,Ccredit) V ALUES('1','数据库系统原理', '5',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) V ALUES('2','高等数学', null,2)请写出插入其余行的插入语句,并插入数据。

INSERT INTO Course(Cno,Cname,Cpno,Ccredit)V ALUES('3','管理信息系统','1',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit)V ALUES('4','操作系统原理','6',3) INSERT INTO Course(Cno,Cname,Cpno,Ccredit)V ALUES('5','数据结构','7',4)INSERT INTO Course(Cno,Cname,Cpno,Ccredit)V ALUES('6','数据处理',NULL,2) INSERT INTO Course(Cno,Cname,Cpno,Ccredit)V ALUES('7','C语言',NULL,4) (3)插入到SC表INSERT INTO SC V ALUES('20100001','1',92)INSERT INTO SC V ALUES('20100002','2',80)请写出插入其余行的插入语句,并运行。

INSERT INTO SC V ALUES('20100001','2',85)INSERT INTO SC V ALUES('20100001','3',88)INSERT INTO SC V ALUES('20100002','1',90)INSERT INTO SC V ALUES('20100003','1',NULL)INSERT INTO SC V ALUES('20100010','3',NULL)修改约束对数据库中已经存在的表,可对其增加约束或修改已存在的约束:(1)添加约束ALTER TABLE Course ADD UNIQUE(Cname)ALTER TABLE Course ADD FOREIGN KEY (Cpno) REFERENCES Course(Cno) 检查完整性约束通过修改数据库中的数据检查完整性约束条件的作用。

检查主键约束检查主键约束检查主键约束检查主键约束(1)执行下面的语句修改Student表,观察语句能否正确运行,解释为什么?INSERT INTO Student V ALUES('20100101','李斌','男',20,'CS','1001',0)INSERT INTO Student V ALUES('20100001','李斌','男',20,'CS','1001',0) UPDATE Student SET Sno='20100021' WHERE Sname = '张立'不能正确运行,不能重复插入数据(2)执行下面的语句修改SC表,观察语句能否正确运行,解释为什么?INSERT INTO SC V ALUES('20100001','1',78)INSERT INTO SC V ALUES('20100001',null,78)不能正确运行,SC表中插入的Cno是Course表中的主码,而主码非空,所以插入失败;对学号20100001选修1号课程先前已经插入数据,不能重复插入,所以插入失败。

2.检查唯一约束检查唯一约束检查唯一约束检查唯一约束执行下面的语句修改Course表,观察语句能否正确运行,解释为什么?INSERT INTO Course V ALUES('8','JA V A',7, 3)INSERT INTO Course V ALUES('9','数据结构',7, 3)不能正确运行,因为在表Course中Cname定义的是唯一约束。

3检查默认值允许空值列运行如下的语句:INSERT INTO Student(Sno,Sname,Ssex,Sclass) V ALUES('20100102','张盛','男','1008')观察插入数据行的数值SELECT * FROM Student WHere Sno='20100102'4检查非空约束下面的语句包含空值,检查运行结果,解释为什么?INSERT INTO Student(Sno,Sname,Ssex,Sclass) V ALUES('20100103','张盛','男',NULL) INSERT INTO Student(Sno,Sname,Ssex) V ALUES('20100104','张盛','男')在表得的定义中,定义Sclass为NOT NULL,插入数据时,不能插入值为空的数据。

相关主题