第五章-数据库完整性课件.ppt

上传人:飞****2 文档编号:82438540 上传时间:2023-03-25 格式:PPT 页数:84 大小:1.38MB
返回 下载 相关 举报
第五章-数据库完整性课件.ppt_第1页
第1页 / 共84页
第五章-数据库完整性课件.ppt_第2页
第2页 / 共84页
点击查看更多>>
资源描述

《第五章-数据库完整性课件.ppt》由会员分享,可在线阅读,更多相关《第五章-数据库完整性课件.ppt(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、An Introduction to Database System中国人民大学信息学院中国人民大学信息学院数据库系统概论数据库系统概论An Introduction to Database System第五章第五章 数据库完整性数据库完整性An Introduction to Database System引导同学们去观察和发现问题引导同学们去观察和发现问题v数据库是现实世界状态的正确的反映.v那么如何确保数据库能正确反映现实世界呢?时间时间 运动An Introduction to Database System可能造成数据失真的因素可能造成数据失真的因素v数据进入系统时的错误与现实世界状

2、态不符合的、不正确的数据An Introduction to Database System可能造成数据失真的因素可能造成数据失真的因素v数据进入系统时的错误与现实世界状态不符合的、不正确的数据v系统故障丢失了数据An Introduction to Database System可能造成数据失真的因素可能造成数据失真的因素v数据进入系统时的错误与现实世界状态不符合的、不正确的数据v系统故障丢失了数据v相互干扰被他人覆写了An Introduction to Database System可能造成数据失真的因素可能造成数据失真的因素v数据进入系统时的错误与现实世界状态不符合的、不正确的数据v系

3、统故障丢失了数据v相互干扰被他人覆写了v恶意破坏非法入侵与修改An Introduction to Database System可能造成数据失真的因素可能造成数据失真的因素v数据进入系统时的错误与现实世界状态不符合的、不正确的数据An Introduction to Database System引导学生进行分析和观察引导学生进行分析和观察v有哪些具体的违反现实世界规则的情况?(以学生选课数据库为例进行讨论)v学生的性别只能取“男”或者“女”v成绩应在0到100分之间v学生学号应唯一v学生所选课程应是存在的课程v学生的名字不能取“赵C”v其他An Introduction to Databa

4、se System引导学生分析和观察引导学生分析和观察v这些要求可以进一步分类(分类是一种重要的研究方法,可以将问题进一步的弄清楚)关系模型要求的约束:实体完整性,参照完整性,数据类型等用户定义的约束:可以按照约束影响的范围分为:单一属性上的,单一元组上的,单一表上的,多个表之间的;范围越小,维护的代价越小。v在高效统一地处理各种不同的约束有困难的时候,分而治之、各个击破是好办法。An Introduction to Database System对问题进行抽象和定义对问题进行抽象和定义v对于一个关系模式R,以及一组从现实世界中抽象出来的约束条件F,v将F称为“完整性约束条件”,也称为“完整性

5、规则”,是数据库中的数据必须满足的语义约束条件v对于任意的一个具体关系rR,如何保证F(r)为真?An Introduction to Database System如何进行完整性维护系统的设计?如何进行完整性维护系统的设计?v三件事情:v1如何表达完整性约束条件?v2如何检查完整性约束条件?如何检查?v3违反条件时候的如何处理?An Introduction to Database System数据库完整性数据库完整性1.提供定义完整性约束条件的机制SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性这些完整性一般由SQL的DDL语句来实现An Int

6、roduction to Database System数据库完整性数据库完整性(续续)2.提供完整性检查的方法引起数据库状态改变的操作有哪些?INSERT、UPDATE、DELETE语句执行上述操作后开始检查。3.违约处理DBMS若发现用户的操作违背了完整性约束条件,就采取一定的动作拒绝(NOACTION)执行该操作级联(CASCADE)执行其他操作其他用户定义的操作An Introduction to Database System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句

7、完整性约束命名字句5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System5.1 实体完整性实体完整性5.1.1 实体完整性定义实体完整性定义5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理An Introduction to Database System5.1.1 实体完整性定义实体完整性定义v关系模型的实体完整性CREATETABLE中用PRIMARYKEY定义v单属性构成的码有两种说明方法定义为列级约束条件定义为表级约束条件v对多个属性构成的码只有一种说明方法定义为表级约束条件An In

8、troduction to Database System实体完整性定义实体完整性定义(续续)例1将Student表中的Sno属性定义为码(1)在列级定义主码在列级定义主码CREATETABLEStudent(Sno CHAR(9)PRIMARY KEY,/*在列级定义主码在列级定义主码*/SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20);(2)在表级定义主码在表级定义主码CREATETABLEStudent(SnoCHAR(9),SnameCHAR(20)NOTNULL,SsexCHAR(2),SageSMALLINT,S

9、deptCHAR(20),PRIMARY KEY(Sno);/*在表级定义主码在表级定义主码*/An Introduction to Database System实体完整性定义实体完整性定义(续续)例2将SC表中的Sno,Cno属性组定义为码CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,PRIMARYKEY(Sno,Cno)/*只能在表级定义主码*/);An Introduction to Database System5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理v当用户程序对基本表插入一条记录

10、或者对主码列进行更新操作时,RDBMS自动进行检查。包括:1.检查主码值是否唯一,如果不唯一则拒绝插入或修改2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改v检查记录中主码值是否唯一的一种方法是进行全表扫描依次判断表中每一条记录的主码值与将插入记录上的主码值(或者修改的新主码值)是否相同An Introduction to Database System实体完整性检查和违约处理实体完整性检查和违约处理(续续)用全表扫描方法检查主码唯一性 全表扫描缺点:十分耗时为避免对基本表进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引An Introduction to Databa

11、se System实体完整性检查和违约处理实体完整性检查和违约处理(续续)通过B+树索引查找基本表中是否已经存在新的主码值,可以提高效率n如果新插入记录的主码值是25通过主码索引,从B+树的根结点开始查找读取3个结点:根结点(51)中间结点(12 30)叶结点(15 20 25)该主码值已经存在,不能插入这条记录使用索引检查主码唯一 An Introduction to Database System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句5.5 域中的完整

12、性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System5.2 参照完整性参照完整性5.2.1 参照完整性定义参照完整性定义v在CREATETABLE中用FOREIGNKEY短语定义哪些列为外码v用REFERENCES短语指明这些外码参照哪些表的主码5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理An Introduction to Database System参照完整性定义参照完整性定义(续续)例3定义SC中的参照完整性CREATETABLESC(SnoCHAR(9)NOTNULL,CnoCHAR(4)NOT

13、NULL,GradeSMALLINT,PRIMARY KEY(Sno,Cno),/*在表级定义实体完整性在表级定义实体完整性*/FOREIGNKEY(Sno)REFERENCESStudent(Sno),/*在表级定义参照完整性*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)/*在表级定义参照完整性*/);An Introduction to Database System5.2 参照完整性参照完整性5.2.1 参照完整性定义参照完整性定义5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理v一个参照完整性将两个表中的相应元组联系起来v对被参照表和参照表进行

14、增删改操作时有可能破坏参照完整性,必须进行检查An Introduction to Database System参照完整性检查参照完整性检查(续续)例如,对表SC和Student有四种可能破坏参照完整性的情况1.SC表中增加一个元组表中增加一个元组,该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。2.修改修改SC表中的一个元组表中的一个元组,修改后该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。3.从从Student表中删除一个元组表中删除一个元组,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,

15、其Sno属性的值与之相等。4.修改修改Student表中一个元组的表中一个元组的Sno属性属性,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等An Introduction to Database System参照完整性检查和违约处理参照完整性检查和违约处理(续续)可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性拒绝/级连修改/设置为空值An Introd

16、uction to Database System违约处理违约处理参照完整性违约处理参照完整性违约处理1.拒绝(NOACTION)执行不允许该操作执行。一般设置为默认策略。2.级连(CASCADE)操作当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组例如,删除Student表中的元组,Sno值为200215121,则从要SC表中级连删除SC.Sno=200215121的所有元组3.设置为空值(SET-NULL)当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。An In

17、troduction to Database System违约处理违约处理(续续)3.设置为空值(设置为空值(SET-NULL)(续)(续)例如,有下面2个关系学生(学号,姓名,性别,专业号,年龄)专业(专业号,专业名)假设专业表中某个元组被删除,专业号为12按照设置为空值的策略,就要把学生表中专业号=12的所有元组的专业号设置为空值。对应语义:某个专业删除了,该专业的所有学生专业未定,等待重新分配专业外码An Introduction to Database System违约处理违约处理(续续)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值v在学生表中,“专业号”是外码,可以取

18、空值,表示这个学生的专业尚未确定v学生选课数据库中Student关系为被参照关系,其主码为SnoSC为参照关系,Sno为外码同时Sno为SC的主属性,按照实体完整性Sno不能为空值若SC的Sno为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中,这与学校的应用环境是不相符的因此SC的Sno列不能取空值。同样,SC的Cno列不能取空值v一般地,当对参照表和被参照表的操作违反了参照完整性,系统选用默认策略,即拒绝执行。v如果想让系统采用其他的策略则必须在创建表的时候显式地加以说明An Introduction to Database System违

19、约处理违约处理(续续)例4显式说明参照完整性的违约处理示例CREATETABLESC(SnoCHAR(9),CnoCHAR(4),GradeSMALLINT,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudent(Sno)ONDELETECASCADE/*级连删除SC表中相应的元组*/ONUPDATECASCADE,/*级连更新SC表中相应的元组*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)ONDELETENOACTION/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/ONUPDATECASCAD

20、E/*当更新course表中的cno时,级连更新SC表中相应的元组*/);An Introduction to Database System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System5.3 用户定义的完整性用户定义的完整性v用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求vRDBMS都提供了定义和检验这类

21、完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能An Introduction to Database System5.3 用户定义的完整性用户定义的完整性5.3.1 属性上的约束条件的定义属性上的约束条件的定义5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理An Introduction to Database System5.3.1 属性上的约束条件的定义属性上的约束条件的定义v在CRE

22、ATETABLE定义属性的同时可以根据应用要求,定义属性上的约束条件定义属性上的约束条件,即属性值限制,包括:列值非空(NOTNULL短语)列值唯一(UNIQUE短语)检查列值是否满足某个条件(CHECK短语)短语)An Introduction to Database System属性上的约束条件的定义属性上的约束条件的定义(续续)1.不允许取空值不允许取空值 例5在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATETABLESC(SnoCHAR(9),CnoCHAR(4),GradeSMALLINTNOTNULL,PRIMARYKEY(Sno,Cno),/*如果在表

23、级定义实体完整性,隐含了Sno,Cno*/*不允许取空值,则在列级不允许取空值的定义就不必写了*/FOREIGNKEY(Sno)REFERENCESStudent(Sno),/*在表级定义参照完整性*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)/*在表级定义参照完整性*/);An Introduction to Database System属性上的约束条件的定义属性上的约束条件的定义(续续)2.列值唯一列值唯一 例6建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT(DeptnoNUMERIC(2),

24、DnameCHAR(9)UNIQUE,/*要求Dname列值唯一*/LocationCHAR(10),PRIMARYKEY(Deptno);An Introduction to Database System属性上的约束条件的定义属性上的约束条件的定义(续续)3.用用CHECK短语短语指定列值应该满足的条件指定列值应该满足的条件例7Student表的Ssex只允许取“男”或“女”。CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(8)NOTNULL,SsexCHAR(2)CHECK(Ssex IN(男男,女女),/*性别属性Ssex只允许取男或

25、女*/SageSMALLINT,SdeptCHAR(20);An Introduction to Database System属性上的约束条件的定义属性上的约束条件的定义(续续)3.用用CHECK短语指定列值应该满足的条件短语指定列值应该满足的条件例8SC表的Grade的值应该在0和100之间CREATETABLESC(SnoCHAR(9),CnoCHAR(4),GradeSMALLINTCHECK(Grade=0ANDGrade=100),PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudent(Sno),FOREIGNKEY(Cno)REF

26、ERENCESCourse(Cno);An Introduction to Database System5.3 用户定义的完整性用户定义的完整性5.3.1 属性上的约束条件的定义属性上的约束条件的定义5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理An Introduction to Database System5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理v当往表中插入元组或修改属性的值时,RDBMS就检查属性

27、上的约束条件是否被满足v如果不满足则操作被拒绝执行An Introduction to Database System5.3 用户定义的完整性用户定义的完整性5.3.1 属性上的约束条件的定义属性上的约束条件的定义5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理An Introduction to Database System5.3.3 元组上的约束条件的定义元组上的约束条件的定义v在CREATETABLE语句中可以用CHECK短语定义元组

28、上的约束条件,即元组级的限制v同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件An Introduction to Database System元组上的约束条件的定义元组上的约束条件的定义(续续)例9当学生的性别是男时,其名字不能以Ms.打头CREATETABLEStudent(SnoCHAR(9),SnameCHAR(8)NOTNULL,SsexCHAR(2),SageSMALLINT,SdeptCHAR(20),PRIMARYKEY(Sno),CHECK(Ssex=女女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和Ssex两个属性值之间

29、的约束条件*/);性别是女性的元组都能通过该项检查,因为Ssex=女成立;当性别是男性时,要检查名字不能以Ms.打头An Introduction to Database System5.3 用户定义的完整性用户定义的完整性5.3.1 属性上的约束条件的定义属性上的约束条件的定义5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义元组上的约束条件的定义 5.3.4 元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理An Introduction to Database System5.3.4 元组上的约束条件检查和违约处理元组上

30、的约束条件检查和违约处理v当往表中插入元组或修改属性的值时,RDBMS就检查元组上的约束条件是否被满足v如果不满足则操作被拒绝执行An Introduction to Database System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System5.4 完整性约束命名字句完整性约束命名字句SQL还在CREATETABLE语

31、句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名1.完整性约束命名子句完整性约束命名子句CONSTRAINTPRIMARYKEY短语|FOREIGNKEY短语|CHECK短语An Introduction to Database System完整性约束命名字句完整性约束命名字句(续续)例10建立学生登记表Student,要求学号在9000099999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATETABLEStudent(SnoNUMERIC(6)CONSTRAINTC1CHECK(SnoBETWEEN90000AND99999),Sname

32、CHAR(20)CONSTRAINTC2NOTNULL,SageNUMERIC(3)CONSTRAINTC3CHECK(Sage=3000);An Introduction to Database System完整性约束命名字句完整性约束命名字句(续续)2.修改表中的完整性限制修改表中的完整性限制使用ALTERTABLE语句修改表中的完整性限制ALTERTABLEADD完整性约束DROPALTERCOLUMN;例12去掉例10Student表中对性别的限制ALTERTABLEStudentDROPCONSTRAINTC4;An Introduction to Database System完整

33、性约束命名字句完整性约束命名字句(续续)例13修改表Student中的约束条件,要求学号改为在900000999999之间,年龄由小于30改为小于40可以先删除原来的约束条件,再增加新的约束条件ALTERTABLEStudentDROPCONSTRAINTC1;ALTERTABLEStudentADDCONSTRAINTC1CHECK(SnoBETWEEN900000AND999999),ALTERTABLEStudentDROPCONSTRAINTC3;ALTERTABLEStudentADDCONSTRAINTC3CHECK(Sage40);An Introduction to Datab

34、ase System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System触发器触发器v触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程v一旦定义,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制v触发器可以实施比FOREIGNKEY约束、CHECK约束更为复杂

35、的检查和操作,具有更精细和更强大的对数据完整性控制能力vSQL3标准支持触发器An Introduction to Database System5.6 触发器触发器5.6.1 定义触发器定义触发器5.6.2 激活触发器激活触发器5.6.3 删除触发器删除触发器An Introduction to Database System5.6.1 定义触发器定义触发器SQL使用CREATETRIGGER命令建立触发器CREATETRIGGERBEFORE|AFTERONFOREACHROW|STATEMENTWHENAn Introduction to Database System定义触发器定义触发

36、器(续续)例18为教师表Teacher定义一个BEFORE行级触发器:“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”CREATETRIGGERInsert_Or_Update_SalBEFOREINSERT OR UPDATEONTeacher/*触发事件:插入或更新操作*/FOREACH ROW/*行级触发器*/ASBEGIN/*定义触发动作体:PL/SQL过程块*/IF(new.Job=教授)AND(new.Sal4000)THENnew.Sal:=4000;ENDIF;END;An Introduction to Database System定义触发器定义触发

37、器(续续)定义触发器的语法说明:1.表的拥有拥有者即创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器2.触发器名触发器名可以包含模式名,也可以不包含模式名同一模式下,触发器名必须是唯一的触发器名和必须在同一模式下3.表名当这个表的数据发生变化时,将激活定义在该表上相应的触发器,该表称为触发器的目标表目标表An Introduction to Database System定义触发器定义触发器(续续)4.触发事件触发事件可以是INSERT、DELETE或UPDATE及其组合UPDATE后面还可以有OF,即进一步指明修改哪些列时触发器激活触发器动作时间:BEFORE:触发事

38、件进行前,测试AFTER:触发事件发生后,测试5.触发器的类型:触发器按照所触发动作的间隔可以分为:行级触发器(FOREACHROW)语句级触发器(FOREACHSTATEMENT)An Introduction to Database System定义触发器定义触发器(续续)6.触发条件v触发器被激活时,只有当触发条件为真时触发动作体才执行;否则触发动作体不执行。v如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行7.触发动作体v可以是一个PL/SQL过程块v也可以是对已创建存储过程的调用v如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对

39、象不发生任何变化An Introduction to Database System定义触发器定义触发器(续续)例18为教师表Teacher定义一个BEFORE行级触发器:“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*触发事件:插入或更新操作*/FOR EACH ROW /*行级触发器*/AS BEGIN /*定义触发动作体:PL/SQL过程块*/IF(new.Job=教授)AND(new.Sal 4000)THEN new

40、.Sal:=4000;END IF;END;7.对触发动作体的进一步讲解v如果是行级触发器,用户可以在过程体中使用NEW和OLD/*KingbaseES的语法*/引用UPDATE/INSERT事件之后的新值和 UPDATE/DELETE事件之前的旧值v如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用An Introduction to Database System定义触发器定义触发器(续续)例18CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*触发事件是插入或更新操作*/REF

41、ERENCINGNEW AS NewTuple /*NEW AS 字句 定义修改后的元组变量*/FOR EACH ROW /*行级触发器*/AS BEGIN /*定义触发动作体,是PL/SQL过程块*/IF(NewTuple.Job=教授)AND(NewTuple.Sal=1.1*Old.Grade)FOR EACH ROW INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade)VALUES(Old.Sno,Old.Cno,Old.Grade,New.Grade)An Introduction to Database System定义触发器定义触发器(续续)例1

42、9当教师表Teacher的工资发生变化后就自动在工资变化表Sal_log中增加一条相应记录CREATETABLESal_log/*首先建立工资变化表Sal_log*/(EnoNUMERIC(4)referenceteacher(Eno),SalNUMERIC(7,2),Usernamechar(10),DateTIMESTAMP);CREATETRIGGERInsert_Sal/*建立一个AFTER行级触发器*/AFTERINSERTONTeacher/*触发事件是INSERT*/FOREACHROWASBEGININSERTINTOSal_logVALUES(New.Eno,New.Sal,

43、CURRENT_USER,CURRENT_TIMESTAMP);END;An Introduction to Database System定义触发器定义触发器(续续)CREATETRIGGERUpdate_Sal/*建立一个AFTER行级触发器*/AFTERUPDATEONTeacher/*触发事件是UPDATE*/FOREACHROWASBEGINIF(new.Salold.Sal)THENINSERTINTOSal_logVALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);ENDIF;END;An Introduction to

44、Database System定义触发器定义触发器(续续)触发器与前面介绍的各种完整性限制的不同完整性限制是当被限制的对象发生变化时,系统就去检查该对象变化后能否满足限制条件,如果不能满足,就拒绝引起这种变化的操作。触发器是当特定的系统事件(对一个表的增、删、改,事务的结束)发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。触发事件的操作可能执行也可能不执行。An Introduction to Database System5.6 触发器触发器5.6.1 定义触发器定义触发器5.6.2 激活触发器激活触发器5.6.3 删除触发器删除触发器An Introduct

45、ion to Database System5.6.2 激活触发器激活触发器v触发器的执行,是由触发事件激活的,并由数据库服务器自动执行v同一个表上的多个触发器激活时遵循如下的执行顺序:(1)执行该表上的BEFORE触发器;(2)激活触发器的SQL语句;(3)执行该表上的AFTER触发器。v对于同一个表上的多个BEFORE(AFTER)触发器有些RDBMS遵循“谁先创建谁先执行”的原则,即按照触发器创建的时间先后顺序执行有些RDBMS按照触发器名称的字母排序顺序执行触发器An Introduction to Database System5.6 触发器触发器5.6.1 定义触发器定义触发器5.

46、6.2 激活触发器激活触发器5.6.3 删除触发器删除触发器An Introduction to Database System5.6.3 删除触发器删除触发器v删除触发器的SQL语法:DROPTRIGGERON;v触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。例21删除教师表Teacher上的触发器Insert_SalDROPTRIGGERInsert_SalONTeacher;An Introduction to Database System第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义

47、的完整性5.4 完整性约束命名字句完整性约束命名字句5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结An Introduction to Database System5.7 小结小结v数据库的完整性是为了保证数据库中存储的数据是正确的vRDBMS完整性实现的机制完整性约束定义机制完整性检查机制违背完整性约束条件时RDBMS应采取的动作v在关系系统中,最重要的完整性约束是实体完整性参照完整性用户定义的完整性An Introduction to Database System小结小结(续续)v数据库完整性的定义一般由SQL的DDL语句实现作为数据库模式的一部分存入数据

48、字典在数据库数据修改时,RDBMS的完整性检查机制就按照数据字典中定义的这些约束进行检查v完整性机制的实施会影响系统性能。随着硬件性能的提高,数据库技术的发展,目前的RDBMS都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能。An Introduction to Database System小结小结(续续)v对于违反完整性的操作要根据应用语义来选择合适的处理策略,以保证数据库的正确性v实现数据库完整性的一个重要方法是触发器是定义在关系表上的由事件驱动的特殊过程可以用于数据库完整性检查也可以用来实现数据库系统的其他功能数据库安全性应用系统的一些业务流程和控制流程基于规则的数据和

49、业务控制功能v不同的RDBMS实现触发器的语法不同An Introduction to Database System作业作业可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性拒绝/级连修改/设置为空值An Introduction to Database System作业作业1.使用触发器来实现参照完整性a)向SC表中插入元组时,进行参照完整性检查b)在Student表中,删除一个元组时,进行参照完整性检

50、查2.建立一个SC表上的触发器当学生选课变化时要修改SC表中的课程号或增加一个选课记录,要求保持每门课程选修的人数不超过60人。如果超过,拒绝学生选修该门课程。3.建立一个SC表上的触发器学期结束当教师修改SC表中修课成绩Grade后,找出不及格课程数大于等于6门的学生号码和该学生不及格的课程数。An Introduction to Database System作业作业定义表TAB,并在其上定义触发器TRI,在对TAB的插入和更新前检查,如果插入或更新的值在1001000之间的话,将值置为50;如果值大于1000的话,则给出新值不允许大于1000的提示。CREATETABLEtab(coli

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁