8实验八 数据库的完整性
实验八实现数据完整性

实验八实现数据完整性学号:20101020232 姓名:侯金强 专业:信息管理与信息系统 实验时间:2011年10月30日 实验地点:宿舍和公管实验室 1.实验目的1)掌握域完整性的实现方法。
2)掌握实体完整性的实现方法。
3)掌握参照完整性的方法。
2.实验内容1)为表中列添加约束规则,实现域完整性。
2)为表添加一个标识列,实现实体完整性。
3)为两表建立关联,实现参照完整性。
3.实验步骤1)实现域完整性①启动SQL Server企业管理器,打开“SQL Server Enterprise Manager”窗口。
②选择要创建规则对象的数据库文件夹XSCJ数据库,查看表。
③要求设置规则:学生情况表XSQK中的性别字段只能输入1和0;(截图)课程表KC中的开课学期字段只能是1-6,学分字段为0-8。
(截图)成绩表XS_KC中的成绩字段只能是0-100。
(截图)完成规则后,打开表的数据记录窗口插入记录。
每个表分别插入2条记录,当插入第一条时,按规则来输入,这时系统成功地插入新数据行,但无信息返回;而在插入第二条时,不按规则输入,则系统提示错误信息(截图),拒绝接受非法格式,从而保证了域完整性。
验证输入后关闭表的数据记录窗口。
2)实现实体完整性①在对象窗口中选择并打开其中的“表”对象,选中KC表。
②选择“操作”菜单中的“设计表”命令,打开表编辑器窗口。
③添加一个标识列,种子值为1,递增量也为1。
(截图)④点击快捷工具拦上的快捷按钮,完成标识列的添加,然后关闭编辑窗口。
⑤选中KC表并打开表的数据记录窗口。
(截图)可以看到,系统自动为每行的标识列填充了值,并从1开始,依次递增,这样,表中的每一数据行都可以由标识列唯一标识,实现了实体完整性。
⑥关闭表的数据记录窗口。
3)实现参照完整性①在对象窗口中选择打开其中的“表”对象,选中XS_KC表。
②先择“操作”菜单中的“设计表”命令,打开表编辑器窗口。
③点击快捷工具拦上的快捷按钮,打开“属性”对话框的“关系”选项卡。
数据库完整性实验报告

数据库完整性实验报告数据库完整性实验报告引言数据库完整性是指数据库中数据的准确性、一致性和有效性。
在数据库中,完整性是非常重要的,它保证了数据的可靠性和可信度。
本实验报告旨在介绍数据库完整性的概念、重要性以及实验过程和结果。
一、数据库完整性的概念和重要性数据库完整性是指数据库中的数据应符合规定的约束条件,不应存在冲突、矛盾或不一致的情况。
它包括实体完整性、参照完整性和用户定义的完整性。
1. 实体完整性实体完整性是指数据库中的每个实体都必须具有唯一的标识符。
在关系型数据库中,实体完整性通常通过主键来实现。
主键是一个能唯一标识实体的属性或属性组合,它保证了每个实体的唯一性。
2. 参照完整性参照完整性是指数据库中的外键必须引用已存在的主键。
外键是一个表中的属性,它引用了另一个表的主键。
参照完整性保证了表与表之间的关联关系的正确性和一致性。
3. 用户定义的完整性用户定义的完整性是指用户自定义的约束条件必须满足。
例如,一个表中的某个属性必须满足某种条件,如非空、唯一等。
用户定义的完整性保证了特定业务需求的满足。
数据库完整性的重要性在于保护数据的可靠性和一致性。
它可以防止数据的错误、冲突和不一致,确保数据的准确性和可信度。
同时,数据库完整性也为数据库的安全性提供了基础,防止非法访问和恶意操作。
二、实验过程本实验使用MySQL数据库进行实验。
1. 创建数据库和表首先,创建一个名为"students"的数据库,并在其中创建一个名为"grades"的表。
表"grades"包含三个字段:学生ID、课程名称和成绩。
2. 添加完整性约束在表"grades"中,为学生ID字段添加主键约束,保证每个学生ID的唯一性。
同时,为课程名称字段添加非空约束,保证每个课程都有名称。
3. 添加参照完整性约束在表"grades"中,为学生ID字段添加外键约束,引用了另一个表"students"中的主键。
数据库的完整性和安全性实验报告

信息工程学院实验报告课程名称:《数据库原理》实验项目名称:数据库的完整性和安全性一、实 验 目 的:(1)掌握数据库约束的概念;(2)熟悉SQL SERVER 的完整性约束技术。
(3)了解SQL SERVER 的违反完整性处理措施。
(4)了解登录账户的管理理念与具体方法。
(5)了解数据库用户的管理的要则。
(6)了解用户权限管理的内涵与方法。
二、实 验 设 备 与 器 件 Win7 +Sql server 2008 三、实 验 内 容 与 步 骤(一)测试完整性运行附录中的SQL 语句,理解SQL 语句中包含的完整性定义。
然后执行下面的SQL 语句,看是否能正常运行,若无法执行,请说明原因。
1.对dept 表进行数据增删改,并检查完整性规则 Dept 已存在的完整性规则如下: dno CHAR(2)PRIMARY KEYdnameV ARCHAR(20) NOT NULL,UNIQUE(1)增加数据INSERT INTO dept V ALUES('D1','计科系');----正常插入INSERT INTO dept V ALUES('D2','电信系');----正常插入INSERT INTO dept V ALUES(NULL,'机械系'); ----违反dno 主键(NOT NULL )规则INSERT INTO dept V ALUES('D2','机械系'); ----违反dno 主键(UNIQUE )INSERT INTO dept V ALUES('D3',NULL); ----违反dname 的NOT NULL 规则INSERT INTO dept V ALUES('D3','计科系'); ----违反dname 的UNIQUE 规则INSERT INTO dept V ALUES('D3','机械系');----正常插入(2)删除数据DELETE FROM dept WHERE dno='D3';----正常删除(3)修改数据UPDA TE dept SET dname='计算机科学系' WHERE dno='D1';----正常修改UPDA TE dept SET dname='电信系' WHERE dno='D1'; ----违反dname的UNIQUE规则UPDA TE dept SET dname=NULL WHERE dno='D1'; 违反dname的UNIQUE规则2.对student表进行数据增删改,并检查完整性规则Student已存在完整性规则如下:sno CHAR(2) PRIMARY KEYsname V ARCHAR(20) NOT NULL,ssex CHAR(2) NOT NULL, CHECK(ssex in('男','女'))sage INT NOT NULL,dno CHAR(2) NOT NULL, FOREIGN KEY REFERENCES dept(dno)ON DELETE CASCADE ON UPDATE CASCADE(1)增加数据INSERT INTO student V ALUES('S1','张刚','男',20,'D1');----正常插入INSERT INTO student V ALUES('S2','李梅','女',21,'D2');----正常插入INSERT INTO student V ALUES('S2','吴敏','男',20,'D1'); ----正常插入INSERT INTO student V ALUES(NULL,'吴敏','男',20,'D1'); ----违反sno 的主键(NOT NULL)规则INSERT INTO student V ALUES('S3','吴敏','男',NULL,'D1'); 违反sage 的主键(NOT NULL)规则INSERT INTO student V ALUES('S3','吴敏','M',20,'D1'); 违反ssex 的CHECK规则INSERT INTO student V ALUES('S3','吴敏','男',20,'D3'); ----正常插入INSERT INTO student V ALUES('S3','吴敏','男',20,'D1');----正常插入(2)删除数据DELETE FROM student WHERE sno='S3'; ----正常删除(3)修改数据UPDA TE student SET sname='赵强',dno='D2' WHERE sno='S1'-----正常修改UPDA TE student SET ssex='F' WHERE sno='S1'; -----违反ssex的CHECK 规则UPDA TE student SET sno='S2' WHERE sno='S1'; -----违反sno的主键(UNIQUE)规则UPDA TE student SET dno='D3' WHERE sno='S1'; 违反dno 的外键规则UPDA TE dept SET dno='D3' WHERE dno='D1';----检查dno的外键ON UPDATE规则,观察运行后效果DELETE FROM dept WHERE dno='D2';----检查dno的外键ON DELETE规则,观察运行后效果(二)使用规则实现数据完整性(1)在查询分析器中,利用命令(CREATE RULE),创建一个关于年龄(sage)约束的规则,将“sage”列的值约束在0~200之间;然后将所创建的规则绑定到“sage”列(提示:用命令Sp_bindrule)。
实验8 数据完整性实验

实验8 数据完整性实验(4学时)1.实验目的本实验的目的是通过实验使学生加深对数据完整性的理解,学会创建和使用触发器。
2.实验内容本实验的内容为:使用SQL设计触发器,通过SQL Server企业管理器定义它们。
1.具体完成下面例题:利用触发器来保证学生选课库中选课表的参照完整性,以维护其外码与参照表中的主码一致。
CREATE TRIGGER SC_inserted ON 选课FOR INSERTAS IF(SELECT COUNT(*)FROM 学生,inserted,课程WHERE 学生.学号= inserted.学号AND inserted.课程号= 课程.课程号)=0 ROLLBACK TRANSACTION代码:截图:2.把课件第5章中卷烟数据库及其触发器的例子在Sql server中完成。
建立卷烟库存表代码:建立卷烟库存表截图:建立卷烟销售表代码:建立卷烟销售表截图:创建触发器[T_INSERT_卷烟库存表]代码:创建触发器[T_INSERT_卷烟库存表]截图:针对[卷烟库存表],插入测试数据:创建触发器[T_INSERT_卷烟销售表]代码:输入数据3.创建一个规则,使成绩大于等于零。
并将其绑定到成绩列上。
规则代码:规则截图:绑定代码:绑定截图:4.创建一个默认值,并绑定到学分列上,使学分默认为4个学分。
默认值代码:默认值截图:绑定代码:绑定截图:5.建立一个update触发器,当更新sc表中的score列时,触发器检查成绩是否提高10%。
如果成绩超过了10%,将以ROLLBACK语句复原触发器和调用触发器语句,并打印“成绩升幅太大,更新失败!”,否则,打印“成绩更新成功!”。
代码:截图:检验:3.实验步骤1、在企业管理器中创建触发器1)在企业管理器中,由服务器开始逐步扩展到触发器所属表的数据库(本例为学生选课数据库),打开表文件夹,在表窗口中用鼠标右击触发器所属的表(本例为选课表)。
数据库的完整性实验报告

数据库的完整性实验报告数据库的完整性实验报告引言:数据库的完整性是指数据库中存储的数据必须满足预定的一致性要求,包括实体完整性、域完整性、参照完整性和用户定义的完整性。
本实验旨在通过设计一个简单的数据库,并通过实际操作验证其完整性。
一、实验目的本实验的目的是通过设计和操作数据库,了解数据库的完整性概念,并掌握如何保证数据的完整性。
二、实验环境本实验使用MySQL数据库管理系统,并在Windows操作系统上进行实验。
三、实验步骤1. 创建数据库首先,我们需要创建一个数据库来存储我们的数据。
在MySQL中,可以使用以下命令创建一个新的数据库:```CREATE DATABASE integrity;```2. 创建数据表接下来,我们需要创建一个数据表来存储我们的数据。
假设我们要创建一个学生信息表,包括学生的学号、姓名和年龄。
可以使用以下命令创建该表:```USE integrity;CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);```3. 插入数据现在,我们可以向刚刚创建的数据表中插入一些数据。
例如,我们可以插入几个学生的信息:```INSERT INTO students (id, name, age) VALUES (1, '张三', 20);INSERT INTO students (id, name, age) VALUES (2, '李四', 22);INSERT INTO students (id, name, age) VALUES (3, '王五', 21);```4. 实体完整性实体完整性是指每个实体都必须具有一个唯一的标识符。
在我们的学生信息表中,学生的学号是唯一的标识符。
为了保证实体完整性,我们可以在创建表时使用PRIMARY KEY约束来定义学号为主键:```CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);```这样,如果有重复的学号插入到表中,系统会报错并拒绝插入。
数据库实验——数据库的完整性

数据库原理与应用实验报告题目:数据库的完整性学号:________________姓名:________________ 教师:________________实验题目数据库的完整性1、实验内容理解以下几张表的内容,根据实际情况设计属性名、数据类型、及各种完整性约束(primary key、foreign key、not null、unique、check),用数据定义语言实现,然后设计实验数据验证约束的效果,当操作违反了完整性约束条件时,数据库管理系统是如何处理的。
1、创建数据库S_T。
2、新建一张学生信息表,该表至少包含学号,姓名,性别,出生日期,专业,要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique),为性别设置检查约束(check)使该属性只能取“男”或“女”。
3、新建一张专业信息表,该表至少包含专业号,专业名称,专业负责人,专业要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),唯一约束(unique)。
4、新建一张课程信息表,该表至少包含课程号,课程名称,学分,开课学期等要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为学分设置约束使该属性取值范围为1到10之间的整数。
5、新建一张选课信息表,该表至少包含学号,课程号,成绩,基点等属性,根据以下选课信息为每个属性选择合适的数据类型。
《数据库原理与应用》课程实验要求:在建表的过程设置约束,根据实际情况选择属性设置主码(primary key),为成绩设置约束使该属性取值范围为0到100之间的整数。
为基点设置约束使该属性取值为0或者大于等于1的值。
6、修改学生信息表,选择该表中合适的属性设置外码约束(foreign key),实现表间数据的参考完整性。
7、修改选课信息表,选择该表中合适的属性设置外码约束(foreign key),要求允许级联更新,但不允许级联删除。
数据库完整性实验报告

数据库完整性实验报告引言数据库完整性是数据库管理系统中的一个重要概念,用于确保数据库中数据的准确性、有效性和一致性。
本实验旨在通过设计和实现一系列完整性约束,来验证数据库完整性的实际应用。
实验目标本实验的目标是设计并实现以下几种完整性约束:1.实体完整性约束2.参照完整性约束3.用户自定义完整性约束实验环境本实验使用了以下工具和环境:•数据库管理系统:MySQL•编程语言:Python•集成开发环境:Jupyter Notebook实验步骤步骤一:数据库设计首先,我们需要设计一个符合实验需求的数据库。
我们选择一个简单的学生管理系统作为示例,包含以下两个实体:1.学生(Student):包含学生的学号、姓名和年龄。
2.课程(Course):包含课程的课程号、课程名和学分。
步骤二:实体完整性约束实体完整性约束用于保证每个实体在数据库中都有唯一的标识。
在本实验中,我们将为学生实体添加一个主键约束,保证每个学生的学号是唯一的。
CREATE TABLE Student (id INT PRIMARY KEY,name VARCHAR(50),age INT);步骤三:参照完整性约束参照完整性约束用于保证关系数据库中的引用一致性。
在本实验中,我们将为课程实体添加一个外键约束,引用学生实体的主键。
CREATE TABLE Course (id INT PRIMARY KEY,name VARCHAR(50),credits INT,student_id INT,FOREIGN KEY (student_id) REFERENCES Student(id));步骤四:用户自定义完整性约束用户自定义完整性约束是根据具体业务需求自定义的约束条件。
在本实验中,我们将为课程实体添加一个自定义约束,保证学分必须大于等于0。
ALTER TABLE CourseADD CONSTRAINT chk_credits CHECK (credits >=0);实验结果通过以上步骤,我们已经成功设计并实现了实体完整性约束、参照完整性约束和用户自定义完整性约束。
数据库完整性实验报告

数据库完整性实验报告第一篇:数据库完整性实验报告实验报告一、实验题目数据库完整性二、实验要求1)建立一个被参照关系test_main,其中id为主键。
.CREATE TABLE test_main(idINT, valueVARCHAR(10), PRIMARY KEY(id));2)建立一个参照关系test_sub,其中id为主键。
CREATE TABLE test_sub(idINT, main_id INT, valueVARCHAR(10), PRIMARY KEY(id));3)使用如下SQL语句插入数据--插入测试主表数据.INSERT INTO test_main(id, value)VALUES(1, 'ONE');INSERT INTO test_main(id, value)VALUES(2, 'TWO');--插入测试子表数据.INSERT INTO test_sub(id, main_id, value)VALUES(1, 1, 'ONEONE');INSERT INTO test_sub(id, main_id, value)VALUES(2, 2, 'TWOTWO');4)使用add constraint语句建立test_ sub表main_id到test_main表id的外键约束 5)删除test_main表中id=1的记录 6)测试完毕后,删除外键约束重新建立外键约束,要求删除主表的记录时候,同时删除子表中相应引用它的记录7)重新尝试第5步中的操作,之后检索test_sub 表,会出现什么结果?测试完毕后,删除外键约束8)重新建立外键约束,要求更新主表的主键时候,同时更新子表外键9)测试更新主表数据,将id=1的记录的id值设为5。
检查test_sub表中的数据是否被同步更新,测试完毕后,删除外键约束10)再次创建外键约束,要求删除主表的时候,同时将子表的main_id 设置为 NULL 11)测试删除主表test_main中id=2的数据,测试检索子表test_sub 测试完毕后,删除外键约束三、实验内容1)CREATE TABLE test_main(idINT, valueVARCHAR(10), PRIMARY KEY(id));2)CREATE TABLE test_sub(idINT, main_id INT, valueVARCHAR(10), PRIMARY KEY(id));3)INSERT INTO test_main(id, value)VALUES(1, 'ONE');INSERT INTO test_main(id, value)VALUES(2, 'TWO');INSERT INTO test_sub(id, main_id, value)VALUES(1, 1, 'ONEONE');INSERT INTO test_sub(id, main_id, value)VALUES(2, 2, 'TWOTWO');4)ALTER TABLE test_subADD CONSTRAINT main_id_cons FOREIGN KEY(main_id)REFERENCES test_main(id);5)delete from test_main where id='1' 无法执行6)alter table test_subdrop constraint main_id_consALTER TABLE test_subADD CONSTRAINT main_id_cons FOREIGN KEY(main_id)REFERENCES test_main(id)on delete cascade;7)delete from test_main where id='1';结果是test_main,和test_sub中的id=1的都被删除了altertable test_subdrop constraintmain_id_cons;8)首先我把上面操作所删除的加上了INSERT INTO test_main(id, value)VALUES(1, 'ONE');INSERT INTO test_sub(id, main_id, value)VALUES(1, 1, 'ONEONE');ALTER TABLE test_subADD CONSTRAINT main_id_cons FOREIGN KEY(main_id)REFERENCES test_main(id)on update cascade;9)update test_main set id='5' where id='1' 结果是main_id也变为了5。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八实现数据完整性一、实验目的
(1)实现数据完整性的概念及实施数据完整性的重要性。
(2)掌握数据完整性的分类。
(3)掌握完整性约束的添加、删除方法。
(4)掌握通用默认值的创建、实施与删除方法。
(5)掌握规则的创建、实施与删除方法。
(6)掌握级联删除、级联修改方法。
二、实验内容
1、完整性约束的添加、删除
(1)通过SQL Server Management Studio实施约束
a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。
①、选择Student表,右击→设计,打开Student表
②、选择Birth一行,右击→CHECK约束,打开界面如下图所示
③、单击“添加”
④、在表达式中写入:Entrance_date<getdate()
⑤、单击“关闭”退出
b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。
选择Sdept一行,在其列属性中修改其默认值
c.为Student表的Sname字段添加唯一性约束。
选择Sname一行,右击→索引/键
出现如下界面:
单击“添加”,在类型中选择“唯一键”,在列中选择“Sname”,名称自定义
最后单击“关闭”退出
d.将SC表的Sno,cno字段设置外键约束,约束名自已取,并允许级联删除与级联更新。
(此要求在SQL Server2008R2中无法做出)若已存在外键约束,请先删除。
①、选中Sno,右击→单击“关系”,出现如下信息,可见已存在外键约束
选中键,点击删除,完成约束删除
②、添加约束:
选中Sno,右击,选择“关系”,出现如下信息,
③、点击添加,并修改
④、修改成自己想要的规范和名称
⑤、确定,完成
⑥、设置Cno的外键同上理
(2)使用Transact-SQL语句实施约束
a.为Student表的Sno字段添加一个check约束,使学号满足如下条件:学号前四位为2011,学号后四位为数字字符。
alter table Student
add constraint sno_num
check(sno like'[2][0][1][1][0-9][0-9][0-9][0-9]')
b.为Student表中的Birth字段添加一个约束,规定生日应小于入学时间。
alter table Student
add constraint birth_date
check(Entrance_date>Birth)
c.禁用(a)中实施的Check约束
alter table Student
NOCHECK CONSTRAINT sno_num
d.重新启用Check约束
alter table Student
CHECK CONSTRAINT sno_num
e.删除(a)所设置check约束
alter table Student
drop CONSTRAINT sno_num
f.将Student表中的classno字段设置为允许空。
alter table Student
alter column classno char(3)null
g.为SC表中的Sno,Cno添加外键约束,约束名自取;并允许级联删除与级联更新。
若已存在外键约束,请先删除。
①、首先查看SC表中Sno和Cno有无外键约束
sp_helpconstraint SC
②、由上图已知,SC中Sno存在外键约束,则删除
alter table SC
drop constraint FK_SC_Student
3、添加Sno和Cno的外键约束
alter table SC
add constraint FK_SC_Student foreign key (Sno) references Student(Sno)
on update cascade
on delete cascade
alter table SC
add constraint FK_SC_Course foreign key (Cno)
references Course(Cno)
on update cascade
on delete cascade
h.为Course表中的Cname字段添加唯一性约束。
alter table Course
add constraint AK_Cname unique(Cname)
2、默认值的实施
(1)通过SQL Server Management Studio实现
a.为数据库Student_info创建一个默认的邮政编码,名称自取,值为:200093。
b.将该默认值绑定到Student表中的Postcode列。
用企业管理器无法做出
c.将Postcode列上的绑定解除,并删除该默认值。
用企业管理器无法做出
(2)用Transact-SQL语句重做(1)中的(a)、(b)、(c)。
(a)、
create default postcode
as'200093'
(b)、sp_bindefault'postcode','Student.Postcode'
(c)、sp_unbindefault'Student.Postcode'
drop default postcode
3、规则的实施
(1)通过SQL Server Management Studio实现
a.为数据库Student_info创建一个关于性别的取值规则,规则名自取,要求字段的取值仅能为’男’或’女’。
用企业管理器无法做出
b.将该规则绑定到Student表的Sex字段上。
用企业管理器无法做出
c.解除Student表的Sex列上的绑定,并删除该规则。
用企业管理器无法做出
(2)使用Transact-SQL重做(1)中的(a)、(b)、(c)。
(a)、
alter table Student
with nocheck
add constraint sex_check check(sex in('男','女'))
create rule Sex_rule
as@sex='男'or@sex='女'
(b)、sp_bindrule'Sex_rule','Student.Sex'
3、sp_unbindrule'Student.Sex'
drop rule sex_rule。