数据库原理05_第1页
数据库原理05_第2页
数据库原理05_第3页
数据库原理05_第4页
数据库原理05_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库完整性,第五章,数据库完整性,第五章,了解什么是数据库的完整性,掌握数据库完整性定义方法,掌握触发器的使用方法。,本章要点,第五章数据库完整性,5.1实体完整性5.2参照完整性5.3用户定义的完整性5.4完整性约束命名子句5.5触发器,具体内容,引言,第五章数据库完整性,数据模型3要素:数据结构,操作集合,完整性约束。完整性约束:1.实体完整性2.参照完整性3.用户定义完整性,数据库的完整性:数据的正确性和相容性(有效性和一致性)。完整性约束:指对数据所规定的语义约束条件。数据的完整性和安全性是两个不同概念:1.数据的完整性:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的、不正确的数据2.数据的安全性:保护数据库防止恶意的破坏和非法的存取。防范对象:非法用户和非法操作DBMS完整性控制3个方面:(1)提供定义完整性约束条件的机制;(2)提供完整性检查的方法;(3)违约处理。,引言,第五章数据库完整性,5.1实体完整性,实体完整性:(EntityIntegrity):若属性K是基本关系R的主码,则属性K不能取空值(主键取值非空且唯一)。实体完整性定义:CREATETABLE时,PRIMARYKEY定义单属性构成的码有两种说明方法:定义为列级和表级约束条件。对多个属性构成的码只有一种说明方法:定义为表级约束条件。,5.1.1实体完整性定义,第五章数据库完整性,5.1实体完整性,例1:建立“学院”表,并定义其实体完整性(定义表级主码)。CREATETABLE学院(学院编号CHAR(1),学院名称CHAR(4),院长姓名CHAR(6),电话CHAR(13),地址CHAR(5),PRIMARYKEY(学院编号);/*在表级定义实体完整性*/例2:建立“学院”表,并定义其实体完整性(定义列级主码)。CREATETABLE学院(学院编号CHAR(1)PRIMARYKEY,学院名称CHAR(4),院长姓名CHAR(6),电话CHAR(13),地址CHAR(5);/*在列级定义实体完整性*/例3:建立“学院”表,并定义其实体完整性(定义表级主码)。CREATETABLE学院(学院编号CHAR(1),学院名称CHAR(4),院长姓名CHAR(6),电话CHAR(13),地址CHAR(5),PRIMARYKEY(学院名称,院长姓名);/*在表级定义实体完整性*/,5.1.1实体完整性定义,第五章数据库完整性,5.1实体完整性,插入或更新主码时,DBMS按照实体完整性规则自动进行检查。1.检查主码值是否唯一,如果不唯一则拒绝插入或更新。2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或更新。,5.1.2实体完整性检查和违约处理,第五章数据库完整性,5.1实体完整性,检查记录中主码值是否唯一的一种方法是进行全表扫描。,5.1.2实体完整性检查和违约处理,第五章数据库完整性,5.1实体完整性,索引,5.1.2实体完整性检查和违约处理,第五章数据库完整性,5.1实体完整性,5.1.2实体完整性检查和违约处理,第五章数据库完整性,例4:有学生关系:,主码不能为空,主码不能重复,5.2参照完整性,参照完整性(ReferenceIntegrity):如果属性集K是关系模式S中的主码,K也是另一个关系模式R的外码,那么在R的关系中K的取值只允许两有两种可能,一是空值,二是S中某个元组的K值。(外码可以是空值,或存在关系间引用的另一个关系的有效值)参照完整性定义:FOREIGNKEY定义哪些列为外码。REFERENCES指明这些外码参照哪些表的主码。,5.2.1参照完整性定义,第五章数据库完整性,5.2参照完整性,5.2.1参照完整性定义,第五章数据库完整性,例5:建立“系”表,并定义其参照完整性。CREATETABLE系(系编号CHAR(4),系名称CHAR(14),系主任CHAR(6),教研室个数SMALLINT,班级个数SMALLINT,学院编号CHAR(1),PRIMARYKEY(系编号),/*在表级定义实体完整性*/FOREIGNKEY(学院编号)REFERENCES学院(学院编号);/*在表级定义参照完整性*/,5.2参照完整性,5.2.1参照完整性定义,第五章数据库完整性,例6:有学生、班级关系:,外码可以为空,外码是另一个关系中的有效值,5.2参照完整性,5.2.2参照完整性检查和违约处理,第五章数据库完整性,在添加、修改或删除数据行时,DBMS按照参照完整性规则自动进行检查两个表的主键和外键的数据的一致性。如果主键指定的某一行被外键引用,那么这一行数据不能直接删除,同样用户也不能直接修改这一主键值。若想要删除主表中的某一个行,则要先删除从表中与之匹配的相关行。,5.2参照完整性,5.2.2参照完整性检查和违约处理,第五章数据库完整性,可能破坏参照完整性的情况及违约处理,5.3用户定义的完整性,5.3.1属性上的约束条件的定义,第五章数据库完整性,用户自定义完整性(User-DefinedIntegrity)是用户自行定义的,不属于其它完整性的所有规则,用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。CREATETABLE时定义:列值非空(NOTNULL)列值唯一(UNIQUE)检查列值是否满足一个布尔表达式(CHECK),5.3用户定义的完整性,5.3.1属性上的约束条件的定义,第五章数据库完整性,1.不允许取空值例7:在定义学生表时,说明学号、姓名、性别属性不允许取空值。CREATETABLE学生(学号CHAR(6),姓名CHAR(6)NOTNULL,性别CHAR(2)NOTNULL,出生年月DATETIME,籍贯VARCHAR(50),班级编号CHAR(8),PRIMARYKEY(学号),/*在表级定义实体完整性*/FOREIGNKEY(班级编号)REFERENCES班级(班级编号);/*在表级定义参照完整性*/,5.3用户定义的完整性,5.3.1属性上的约束条件的定义,第五章数据库完整性,2.列值唯一例8:建立学生表,学号列取值唯一。CREATETABLE学生(学号CHAR(6)UNIQUE,姓名CHAR(6),性别CHAR(2)NOTNULL,出生年月DATETIME,籍贯VARCHAR(50),班级编号CHAR(8),PRIMARYKEY(学号),FOREIGNKEY(班级编号)REFERENCES班级(班级编号);,5.3用户定义的完整性,5.3.1属性上的约束条件的定义,第五章数据库完整性,3.用CHECK短语指定列值应该满足的条件例9:学生表的性别只允许取“男”或“女”。CREATETABLE学生(学号CHAR(6),姓名CHAR(6),性别CHAR(2)CHECK(性别IN(男,女),出生年月DATETIME,籍贯VARCHAR(50),班级编号CHAR(8),PRIMARYKEY(学号),FOREIGNKEY(班级编号)REFERENCES班级(班级编号);,5.3用户定义的完整性,5.3.2属性上的约束条件检查和违约处理,第五章数据库完整性,插入元组或修改属性的值时,DBMS检查属性上的约束条件是否被满足。如果不满足则操作被拒绝执行。,5.3用户定义的完整性,5.3.3元组上的约束条件的定义,第五章数据库完整性,在CREATETABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制。同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件。,5.3用户定义的完整性,5.3.3元组上的约束条件的定义,第五章数据库完整性,例10:学生表的性别只允许取“男”或“女”。CREATETABLE学生(学号CHAR(6),姓名CHAR(6),性别CHAR(2),出生年月DATETIME,籍贯VARCHAR(50),班级编号CHAR(8),CHECK(性别IN(男,女)PRIMARYKEY(学号),FOREIGNKEY(班级编号)REFERENCES班级(班级编号);,5.3用户定义的完整性,5.3.4元组上的约束条件检查和违约处理,第五章数据库完整性,插入元组或修改属性的值时,DBMS根据用户定义的约束条件检查元组上的约束条件是否被满足。如果不满足则操作被拒绝执行。,5.4完整性约束命名子句,第五章数据库完整性,CONSTRAINT约束CONSTRAINTPRIMARYKEY短语|FOREIGNKEY短语|CHECK短语,5.4完整性约束命名子句,第五章数据库完整性,例11:学生表的性别只允许取“男”或“女”。CREATETABLE学生(学号CHAR(6),姓名CHAR(6),性别CHAR(2),出生年月DATETIME,籍贯VARCHAR(50),班级编号CHAR(8),CONSTRAINTTCHECK(性别IN(男,女)PRIMARYKEY(学号),FOREIGNKEY(班级编号)REFERENCES班级(班级编号);,5.5触发器,第五章数据库完整性,触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊存储过程。触发器采用事件驱动机制,当某个触发事件发生时,定义在触发器中的功能将被DBMS自动执行。触发器是一个功能强大的工具,它与表格紧密相连,在表中数据发生变化时自动强制执行。触发器可以用于约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。当一个触发器建立后,它作为一个数据库对象被存储。常用的触发器有INSERT触发器、UPDATE触发器和DELETE触发器3种。,将某些需要多次调用的、实现某个特定任务的程序代码段编写成过程,并存放在数据库中,再通过过程名来调用它们,这些过程就叫做存储过程(StoredProcedure),5.5触发器,第五章数据库完整性,CREATETRIGGER语法格式CREATETRIGGERBEFORE|AFTERON|FOREACHROW|STATEMENTWHEN使用Transact-SQL定义触发器的基本语法:CREATETRIGGER触发器名ON|FOR|AFTER|INSTEADOFINSERT,UPDATE,DELETEAS;,5.5.1定义触发器,5.5触发器,第五章数据库完整性,定义触发器的语法说明:1.创建者:表的拥有者2.触发器名3.表名:触发器的目标表4.触发事件:INSERT、DELETE、UPDATE5.触发器类型行级触发器(FOREACHROW)语句级触发器(FOREACHSTATEMENT),5.5.1定义触发器,5.5触发器,第五章数据库完整性,5.5.1定义触发器,例12:创建触发器ins_student,要求在向“学生”表插入元组(inserted表存放要插入的所有元组)后引发该触发器,检查所插入的元组中学生的班级编号是否出现在“班级”表中,如果在“班级”表中找不到相应的班级编号,则提示用户“班级编号输入有误!”,并且回滚事务。createtriggerins_studenton学生afterinsert/*触发器在插入元组后被引发*/asif(selectcount(*)from班级,insertedwhere班级.班级编号=inserted.班级编号)=0beginprint班级编号输入有误!rollbacktransactionend,5.5触发器,第五章数据库完整性,触发器的执行,是由触发事件激活的,并由数据库服务器自动执行。一个表上可能定义了多个触发器。同一个表上的多个触发器激活时遵循如下的执行顺序(1)执行该表上的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论