数据库完整性教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据库完整性教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 完整性 教学 课件
- 资源描述:
-
1、2022-11-111数据库系统概论数据库系统概论An Introduction to Database System第五章第五章 数据库完整性数据库完整性第五章第五章 数据库完整性数据库完整性什么是数据库的完整性什么是数据库的完整性1)数据的正确性和相容性)数据的正确性和相容性2)防止不合语义的数据进入数据库。)防止不合语义的数据进入数据库。例例:学生的年龄必须是整数,取值范围为学生的年龄必须是整数,取值范围为14-29;学生的性别只能是男或女;学生的性别只能是男或女;学生的学号一定是唯一的;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;学生所在的系必须是学校开设的系;3)完整性:
2、是否真实地反映现实世界)完整性:是否真实地反映现实世界完整性控制机制完整性控制机制1.完整性约束条件定义机制完整性约束条件定义机制2.完整性检查机制完整性检查机制一般在一般在INSERT,UPDATE,DELETE执行后开执行后开始检查,也可以在事务提交时检查。始检查,也可以在事务提交时检查。3.违约处理违约处理 拒绝或级联执行等。拒绝或级联执行等。第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名子句完整性约束命名子句5.6 触发器触发器5.7 小结小结5.1实体完整性实体完整性 5.1
3、.1实体完整性定义实体完整性定义 PRIMARY KEY定义定义,表级完整性约束或列级完表级完整性约束或列级完整性约束整性约束 5.1.2实体完整性检查和违约实体完整性检查和违约处理处理 每当用户程序对基本表插入一条记录或者对主码列进行更新操作时,按照实体完整性规则,系统将进行检查:主主码值是否码值是否唯一,如果不唯一则拒绝插入或修改唯一,如果不唯一则拒绝插入或修改 主主码各属性是否为码各属性是否为空,只要有一个为空就拒绝插入或修改空,只要有一个为空就拒绝插入或修改方法:全表扫描或者索引查找(一般在主码上自动建立一个索引)5.2参照完整性参照完整性 5.2.1参照完整性定义参照完整性定义 创建
4、表时创建表时,FOREIGN KEY定义定义 5.2.2参照完整性检查和违约处理参照完整性检查和违约处理 以以SC和和S为例为例,四种情况四种情况:SC中增加一个元组,而在student中找不到相应的元组 修改SC中的一个元组 从student删除一个元组 修改student中的一个元组5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理 当上述的不一致发生时,系统可以采用以下的策略:当上述的不一致发生时,系统可以采用以下的策略:1 拒绝(拒绝(No Action)执行)执行 不允许该操作执行。该策略一般设置为默认策略。2 级联(级联(Cascade)操作)操作 当删除或修改被参照表(
5、Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组。例如:删除Student表中的元组,Sno的值为200215121,则从要SC表中级联删除SC.Sno=200215121的所有元组。5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理 设置为空值设置为空值 当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组对应属性设置为空值。例:5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理因此,对于参照完整性,除了应该定义外码,因此,对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。还应定义
6、外码列是否允许空值。一般,当对参照表和被参照表的操作违反了参一般,当对参照表和被参照表的操作违反了参照完整性,系统选用默认策略,即拒绝执行。如果照完整性,系统选用默认策略,即拒绝执行。如果想让系统采用其他的策略则必须想让系统采用其他的策略则必须在创建表的时候显在创建表的时候显示地加以说明示地加以说明。显示说明参照完整性的违约处理显示说明参照完整性的违约处理 ON DELETE NO ACTION|CASCADE|SET NULL|SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL|SET DEFAULT 5.3用户定义的完整性用户定义的完整性 5.
7、3.1属性上的约束条件的定义属性上的约束条件的定义 列值非空(列值非空(Not Null);列值唯一(列值唯一(Unique);检查列值是否满足布尔表达式(检查列值是否满足布尔表达式(CHECK););5.3.2属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,检查属性上的约束是否被满足,如果不满足则操作被拒绝执行。5.3.3元组上的约束条件的定义元组上的约束条件的定义 CHECK短语(短语(同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件)5.3.4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 当往表中插入元
8、组或修改属性的值时,检查属性上的约束是否被满足,如果不满足则操作被拒绝执行。5.3用户定义的完整性用户定义的完整性5.3用户定义的完整性用户定义的完整性5.6触发器触发器触发器的基础知识 触发器触发器是一种特殊的存储过程,是是一种特殊的存储过程,是SQL SQL ServerServer为保证数据完整性、确保系统正常工为保证数据完整性、确保系统正常工作而设置的一种高级技术。触发器在特定的作而设置的一种高级技术。触发器在特定的表上定义,该表也称为触发器表。当触发器表上定义,该表也称为触发器表。当触发器所保护的数据发生变化时,触发器就会自动所保护的数据发生变化时,触发器就会自动运行,以保证数据的完
9、整性与正确性。运行,以保证数据的完整性与正确性。1.1.触发器有如下作用:触发器有如下作用:1 1)可以对数据库进行级联修改。)可以对数据库进行级联修改。2 2)可以完成比)可以完成比CHECKCHECK更复杂的约束。与更复杂的约束。与CHECKCHECK约束不约束不 同,在触发器中可以引用其他的表。同,在触发器中可以引用其他的表。3 3)根据改变前后表中不同的数据进行相应的操作。)根据改变前后表中不同的数据进行相应的操作。4 4)对于一个表上的不同的操作)对于一个表上的不同的操作(INSERT(INSERT、UPDATEUPDATE或或 DELETEDELETE)可以采用不同的触发器,即使是
10、对相同的)可以采用不同的触发器,即使是对相同的 语句也可以调用不同的触发器完成不同的操作。语句也可以调用不同的触发器完成不同的操作。在创建数据表时,已经定义了各字段的类型及在创建数据表时,已经定义了各字段的类型及其他约束条件,比如主键、外键关系其他约束条件,比如主键、外键关系等。这些作为等。这些作为预选过滤,在数据写入数据库之前就会被校验,只预选过滤,在数据写入数据库之前就会被校验,只有当这些校验全都通过后,触发器才会执行。有当这些校验全都通过后,触发器才会执行。如果如果前面的这些校验没有全部通过,触发器就不会执行。前面的这些校验没有全部通过,触发器就不会执行。因为触发器是在操作之后才执行。因
11、为触发器是在操作之后才执行。2.2.触发器具有以下特点:触发器具有以下特点:1 1)它是在操作有效后才执行的,即其他约束优先于)它是在操作有效后才执行的,即其他约束优先于 触发器。触发器。2 2)它与存储过程的不同之处在于存储过程可以由用)它与存储过程的不同之处在于存储过程可以由用 户直接调用,而触发器不能被直接调用,是由事户直接调用,而触发器不能被直接调用,是由事 件触发的。件触发的。3 3)一个表可以有多个触发器,在不同表上同一种类)一个表可以有多个触发器,在不同表上同一种类 型的触发器也可以有多个。型的触发器也可以有多个。4 4)触发器允许嵌套,最多为)触发器允许嵌套,最多为3232层。
12、层。5 5)触发器可以提高对表及表行有级联操作的应用程)触发器可以提高对表及表行有级联操作的应用程 序的性能。序的性能。触发器定义之后,其名称存储于sysobjects表中,定义语句存储在syscomments表中。定义触发器的Transact-SQL语句中不能出现以下语句,否则SQL Server将拒绝编译、存储这些语句相关的触发器。所有的CREATE命令 所有的DROP命令 ALTER TABLE和ALTER DATABASE命令 TRUNCATE TABLE命令(删除表中所有行)GRANT和REVOKE命令 UPDATE STATISTICS命令 SELECT INTO命令等。(创建表将
13、结果集填充)在创建触发器时,还要遵循以下原则:(1)触发器的定义必须是批处理的第一条 命令。(2)触发器只能在表上定义。(3)触发器不能处理TEXT和IMAGE数据类型的 大型二进制对象表列。(4)建议不要使用触发器返回一个结果集。3.3.触发器的类型触发器的类型 在在SQL Server 2008SQL Server 2008中,根据激活触发器执行中,根据激活触发器执行的的T-SQLT-SQL语句类型,可以把触发器分为两类:语句类型,可以把触发器分为两类:DMLDML触发器触发器 当 数 据 库 服 务 器 中 发 生 数 据 操 作 语 言(D a t a Manipulation Lan
14、guage)事件(Insert,Update,Delete)时执行的存储过程。DDLDDL触发器触发器 响应数据定义语言(Data Definition Language)事件(Create,Alter,Drop)时执行的存储过程。DML触发器触发器 DML触发器根据引起触发时间的不同可分为触发器根据引起触发时间的不同可分为After触发器(后触发器)触发器(后触发器)和和Instead Of触触发器(替代触发器)发器(替代触发器)After触发器(后触发器)触发器(后触发器)在记录已经改变完后(执行完insert,update或delete和处理完约束后)才被激活执行,主要用于记录变更后的处
15、理或检查,一旦发现错误,也可以用Rollback Transaction语句来回滚本次操作。Instead Of触发器(替代触发器触发器(替代触发器)用来取代原本要进行的操作,在记录变更之前发生的,不执行原来SQL语句里的操作,而是代替insert,update,delete语句去执行触发器本身所定义的操作。DML触发器触发器 DML触发器与表和视图是不能分开的,触发触发器与表和视图是不能分开的,触发器定义在表和视图中,当表或视图中执行器定义在表和视图中,当表或视图中执行insert,update,delete操作时触发器被触发操作时触发器被触发并自动执行。并自动执行。当表或视图被删除时与它关
16、联的触发器也一当表或视图被删除时与它关联的触发器也一同被删除。同被删除。一个表或视图可以定义多个一个表或视图可以定义多个After触发器,触发器,一个表或视图只可以定义一个一个表或视图只可以定义一个Instead触发触发器。器。创建创建DMLDML触发器的触发器的语法格式为语法格式为:CREATE TRIGGER CREATE TRIGGER 触发器名触发器名 ON ON 表名或视图名表名或视图名 FOR|AFTER|INSTEAD OF FOR|AFTER|INSTEAD OF DELETE,INSERT,UPDATE DELETE,INSERT,UPDATE AS AS SQL SQL语句
17、语句 nn 注:不能在视图或临时表上建立触发器,但是在触发注:不能在视图或临时表上建立触发器,但是在触发器定义中可以引用视图或临时表。当触发器引用视图器定义中可以引用视图或临时表。当触发器引用视图或临时表时,产生两个特殊的表:或临时表时,产生两个特殊的表:deleteddeleted表和表和insertedinserted表表。这两个表的结构总与激活触发器的表的。这两个表的结构总与激活触发器的表的结构相同,触发器执行完成后,与该触发器相关的这结构相同,触发器执行完成后,与该触发器相关的这两个临时表也会被自动删除。用户可以用两个临时表也会被自动删除。用户可以用SELECTSELECT语句语句查询
18、临时表的内容,但不能对它们进行修改。查询临时表的内容,但不能对它们进行修改。可以用可以用于触发器的条件测试于触发器的条件测试。例:对例:对stjustju库中库中s s表的表的DELETEDELETE操作定义触发器。操作定义触发器。USE stju GO IF EXISTS(SELECT name FROM sysobjects WHERE name=reader_d AND type=TR)DROP TRIGGER reader_d GO CREATE TRIGGER reader_d CREATE TRIGGER reader_d ON s ON s FOR DELETE FOR DELE
19、TE AS AS PRINT PRINT 数据被删除!数据被删除!GOINSERT触发器和DELETE触发器 当向表中插入数据时,所有数据约束都通过之后,INSERT触发器就会执行。新的记录不但加到触发器表中,而且还会有副本加入insertedinserted表中。同样,DELETE触发器会将删除的内容保存在deleteddeleted表中。INSERTED表与DELETED表一样,它们的记录是可读的,可以进行比较,以便确认这些数据是否正确。UPDATE触发器 利用UPDATE修改一条记录时,相当于删除一条记录然后再增加一条新记录。所以UPDATE操作使用insertedinserted和de
20、leteddeleted两个表。当使用UPDATE操作时,触发器表中原来的记录被移到deleteddeleted表中,修改过的记录插入到insertedinserted表中,触发器可以检查这两个表,以便确定应执行什么样的操作。例例1 例:创建触发器例:创建触发器“T_学生删除学生删除”,从,从“学生学生”表中删除数据时,相应地从表中删除数据时,相应地从“成绩成绩”表中表中删除数据。删除数据。Create trigger T_学生删除学生删除On 学生学生After deleteAsDelete 成绩成绩Where 学生编号学生编号=(select 学生编号学生编号 from deleted)例
21、例2 例:创建触发器例:创建触发器“T_教师添加教师添加”,向,向“辅导辅导员员”表中添加数据时,相应地向表中添加数据时,相应地向“教师教师”表表中添加数据。中添加数据。Create trigger T_教师添加教师添加On 辅导员辅导员After insertAsInsert 教师(编号,姓名,出生年月)教师(编号,姓名,出生年月)Select 编号,姓名,出生年月编号,姓名,出生年月 from inserted例例3 例:创建触发器例:创建触发器“T_教师修改教师修改”,向,向“辅导辅导员员”表中修改表中修改“姓名姓名”列时,相应地修改列时,相应地修改“教师教师”表中的对应数据。表中的对应
展开阅读全文