1、 本章目标:本章目标:掌握数据库的完整性概掌握数据库的完整性概念,以及用念,以及用SQLSQL语言定义关系模式的完整语言定义关系模式的完整性约束条件。性约束条件。第五章第五章 数据库完整性数据库完整性2023-2-102 2第五章第五章 数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户自定义完整性用户自定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 域中的完整性限制域中的完整性限制5.6 5.6 触发器触发器5.7 5.7 小结小结3 3重点和难点重点和难点o重点:重点:n 掌握掌握DBMSDBM
2、S完整性控制机制的三个方面,即完完整性控制机制的三个方面,即完整性约束条件的定义、检查和违约处理。整性约束条件的定义、检查和违约处理。n 用用SQLSQL语言定义关系模式的完整性约束条件。语言定义关系模式的完整性约束条件。包括定义主码、参照完整性;定义与应用有包括定义主码、参照完整性;定义与应用有关的完整性。关的完整性。o难点:难点:n 如何实现完整性的策略,以确保数据的正确如何实现完整性的策略,以确保数据的正确与有效。较复杂的是参照完整性的实现机制。与有效。较复杂的是参照完整性的实现机制。4 4数据库完整性数据库完整性o数据库的完整性数据库的完整性n数据的数据的正确性正确性和和相容性相容性o
3、数据的完整性和安全性是两个不同概念数据的完整性和安全性是两个不同概念n数据的完整性数据的完整性u防止数据库中存在不正确的数据防止数据库中存在不正确的数据u防范对象:不合语义的、不正确的数据防范对象:不合语义的、不正确的数据n数据的安全性数据的安全性u防止恶意的破坏和非法的存取防止恶意的破坏和非法的存取u防范对象:非法用户和非法操作防范对象:非法用户和非法操作5 5数据库完整性数据库完整性(续续)o为维护数据库的完整性,为维护数据库的完整性,DBMSDBMS必须:必须:n 提供定义完整性约束条件的机制提供定义完整性约束条件的机制n 提供完整性检查的方法提供完整性检查的方法n 违约处理违约处理-目
4、前商用的目前商用的DBMSDBMS产品都支持完整性控制产品都支持完整性控制o本章重点讲解本章重点讲解SQLSQL语言中实现完整性控语言中实现完整性控制功能的方法制功能的方法6 65.1 5.1 实体完整性实体完整性5.1.1 5.1.1 实体完整性定义实体完整性定义5.1.2 5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理7 75.1.1 5.1.1 实体完整性定义实体完整性定义o关系模型的实体完整性关系模型的实体完整性nCREATE TABLECREATE TABLE中用中用PRIMARY KEYPRIMARY KEY定义定义o单属性构成的码有两种定义方法单属性构成的码有两种定
5、义方法 n定义为列级约束条件定义为列级约束条件n定义为表级约束条件定义为表级约束条件o对多个属性构成的码只有一种定义方法对多个属性构成的码只有一种定义方法n定义为表级约束条件定义为表级约束条件 8 8实体完整性定义实体完整性定义(续续)o 例例11将将StudentStudent表中的表中的SnoSno属性定义为属性定义为码码n在列级定义主码:在列级定义主码:在属性后增加关键字在属性后增加关键字 CREATE TABLE StudentCREATE TABLE Student (Sno (Sno CHAR(9)CHAR(9)PRIMARY KEY PRIMARY KEY,SnameSname
6、CHAR(20)NOT NULL CHAR(20)NOT NULL,SsexSsex CHAR(2)CHAR(2),Sage SMALLINTSage SMALLINT,SdeptSdept CHAR(20);CHAR(20);9 9实体完整性定义实体完整性定义(续续)n 在表级定义主码:在表级定义主码:在属性表中加入额外的定义在属性表中加入额外的定义主码的子句:主码的子句:PRIMARY KEY(PRIMARY KEY(主码属性名表主码属性名表)CREATE TABLE StudentCREATE TABLE Student (Sno (Sno CHAR(9)CHAR(9),SnameSna
7、me CHAR(20)NOT NULL CHAR(20)NOT NULL,SsexSsex CHAR(2)CHAR(2),Sage SMALLINTSage SMALLINT,SdeptSdept CHAR(20)CHAR(20),PRIMARY KEY(SnoPRIMARY KEY(Sno););1010实体完整性定义实体完整性定义(续续)例例22将将SCSC表中的表中的SnoSno,CnoCno属性组定义为码属性组定义为码 CREATE TABLE SCCREATE TABLE SC (Sno (Sno CHAR(9)NOT NULL CHAR(9)NOT NULL,CnoCno CHAR
8、(4)NOT NULL CHAR(4)NOT NULL,Grade SMALLINTGrade SMALLINT,PRIMARY KEY(SnoPRIMARY KEY(Sno,CnoCno)/*只能在表级定义主码只能在表级定义主码*/););11115.1.2 5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理o插入插入或对主码列进行或对主码列进行更新更新操作时,操作时,RDBMSRDBMS按照实体完整性规则自动进行检按照实体完整性规则自动进行检查。包括:查。包括:n检查主码值是否唯一,不唯一则拒绝检查主码值是否唯一,不唯一则拒绝n检查检查主码的各个属性是否为空主码的各个属性是否为空
9、,只要有一,只要有一个为空就拒绝个为空就拒绝u检查记录中主码值是否唯一的方法:检查记录中主码值是否唯一的方法:全表扫描全表扫描u提高提高实体完整性检查效率的方法:实体完整性检查效率的方法:索引索引12125.2 5.2 参照完整性参照完整性5.2.1 5.2.1 参照完整性定义参照完整性定义5.2.2 5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理13135.2.1 5.2.1 参照完整性定义参照完整性定义o关系模型的参照完整性定义关系模型的参照完整性定义n 在在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY短语定短语定义哪些
10、列为外码义哪些列为外码n 用用REFERENCESREFERENCES短语指明这些外码参照哪些短语指明这些外码参照哪些表的主码表的主码 1414参照完整性定义参照完整性定义(例例)o关系关系SCSC:(Sno,Cno(Sno,Cno)是主码。是主码。Sno,CnoSno,Cno分别参分别参照引用照引用StudentStudent表的主码和表的主码和CourseCourse表的主码表的主码 例例33定义定义SCSC中的参照完整性中的参照完整性 CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno (Sno CHAR(9)NOT NULL,
11、Cno CHAR(4)NOT NULL,CHAR(4)NOT NULL,Grade SMALLINT,Grade SMALLINT,PRIMARY KEY(Sno,CnoPRIMARY KEY(Sno,Cno),),FOREIGN KEY(Sno)REFERENCES Student(SnoFOREIGN KEY(Sno)REFERENCES Student(Sno),/*在表级定义参照完整性在表级定义参照完整性*/FOREIGN KEY(Cno)REFERENCES Course(CnoFOREIGN KEY(Cno)REFERENCES Course(Cno)/*在表级定义参照完整性在表级
12、定义参照完整性*/);/);15155.2.2 5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理o参照完整性:参照完整性:将两个表中的相应元组联系将两个表中的相应元组联系起来起来o可能破坏参照完整性的操作:可能破坏参照完整性的操作:对参照表和对参照表和被参照表的增、删、改被参照表的增、删、改1616参照完整性检查和违约处理参照完整性检查和违约处理o 例例 对表对表SCSC和和StudentStudent,可能破坏,可能破坏参照完整参照完整性的操作情况性的操作情况nSCSC表增加一个元组表增加一个元组n修改修改SCSC表的一个元组表的一个元组n从从StudentStudent表删除一
13、个元组表删除一个元组n修改修改StudentStudent表中一个元组的表中一个元组的SnoSno属性值属性值1717参照完整性检查和违约处理参照完整性检查和违约处理o 练习练习 对表对表SCSC和和CourseCourse,可能破坏,可能破坏参照完参照完整性的操作情况整性的操作情况nSCSC表增加一个元组表增加一个元组n修改修改SCSC表的一个元组表的一个元组n从从CourseCourse表删除一个元组表删除一个元组n修改修改CourseCourse表中一个元组的表中一个元组的CnoCno属性值属性值1818参照完整性检查和违约处理参照完整性检查和违约处理可能破坏参照完整性的情况及违约处理可
14、能破坏参照完整性的情况及违约处理被参照表被参照表(例如例如Student)Student)参照表参照表(例如例如SC)SC)违约违约处理处理可能破坏可能破坏参照完整性参照完整性 插入元组插入元组拒绝拒绝可能破坏可能破坏参照完整性参照完整性 修改外码值修改外码值拒绝拒绝删除元组删除元组可能破坏可能破坏参照完整性参照完整性拒绝拒绝/级连删级连删除除/设置为空设置为空值值修改主码值修改主码值可能破坏可能破坏参照完整性参照完整性拒绝拒绝/级连修级连修改改/设置为空设置为空值值1919违约处理违约处理o参照完整性违约处理参照完整性违约处理n 拒绝拒绝(NO ACTION)(NO ACTION)执行执行u
15、默认策略默认策略n 级联级联(CASCADE)(CASCADE)操作操作u删除删除/修改被参照表的某元组时,则删除修改被参照表的某元组时,则删除/修修改参照表中不一致的元组改参照表中不一致的元组n 设置为空值设置为空值(SET-NULL)(SET-NULL)u删除删除/修改被参照表的某元组时,则设置参修改被参照表的某元组时,则设置参照表中不一致的元组的对应属性为空值照表中不一致的元组的对应属性为空值2020违约处理违约处理n 设置为空值设置为空值(SET-NULL)(SET-NULL)u对于参照完整性,除了应该定义外码,还对于参照完整性,除了应该定义外码,还应定义应定义外码列是否允许空值外码列
16、是否允许空值n 当参照表与被参照表的操作违反了参照完整当参照表与被参照表的操作违反了参照完整性时性时u系统选用默认策略,即拒绝执行系统选用默认策略,即拒绝执行u若想让系统采取其他策略,必须在创建表若想让系统采取其他策略,必须在创建表时显式地说明时显式地说明2121在主表中修改主码例在主表中修改主码例o例:例:将将S S关系中关系中SnoSno=950001=950001的元组中的元组中SnoSno值改为值改为960123960123。设。设SCSC关系中有关系中有4 4个元组个元组的的SnoSno=950001=950001n 级联修改:级联修改:将将SCSC关系中关系中4 4个个SnoSno
17、=950001=950001元组元组中的中的SnoSno值也改为值也改为960123960123。若参照关系同时。若参照关系同时又是另一关系的被参照关系,则修改操作又是另一关系的被参照关系,则修改操作会继续级联下去会继续级联下去2222在主表中修改主码例在主表中修改主码例n 受限修改受限修改:只有当只有当SCSC中没有任何元组的中没有任何元组的SnoSno=950001=950001时,才能修改时,才能修改S S表中表中SnoSno=950001=950001的元组的的元组的SnoSno值值(改为改为960123)960123)n 置空值修改:置空值修改:将将S S表中表中SnoSno=950
18、001=950001的元组的的元组的SnoSno值改为值改为960123,960123,而将而将SCSC表中所有表中所有SnoSno=950001=950001的元组的的元组的SnoSno值置为空值。值置为空值。o在学生选课数据库中在学生选课数据库中只有前二种方法是只有前二种方法是正确的正确的(级联修改、受限修改级联修改、受限修改)2323违约处理违约处理(续续)n 例例44显式说明参照完整性违约处理示例显式说明参照完整性违约处理示例CREATE TABLE SCCREATE TABLE SC(Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,(Sno CHAR(
19、9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno FOREIGN KEY(Sno)REFERENCES Student(Sno)ON DELETE CASCADEON DELETE CASCADE /*级联删除级联删除SCSC表中相应的元组表中相应的元组*/ON UPDATE CASCADEON UPDATE CASCADE,/*级联更新级联更新SCSC表中相应的
20、元组表中相应的元组*/FOREIGN KEY(Cno)REFERENCES Course(Cno FOREIGN KEY(Cno)REFERENCES Course(Cno)ON DELETE NO ACTIONON DELETE NO ACTION /*当删除当删除coursecourse表中的元组造成了与表中的元组造成了与SCSC表不一致时表不一致时拒绝删除拒绝删除*/ON UPDATE CASCADEON UPDATE CASCADE /*当更新当更新coursecourse表中的表中的cnocno时,时,级联更新级联更新SCSC表中相应的元组表中相应的元组*/)2424ON DELET
21、E CASCADEON DELETE CASCADE-级连删除级连删除oDELETE FROM SC WHERE SnoDELETE FROM SC WHERE Sno=1=1n 则只删除则只删除SCSC的一条记录的一条记录,Student,Student表的相应表的相应记录不会被删除记录不会被删除oDELETE FROM Student WHERE SnoDELETE FROM Student WHERE Sno=11n 不但删除不但删除StudentStudent的一条记录,而且表的一条记录,而且表SCSC中中SnoSno=1=1同学的所有选修记录也会被同学的所有选修记录也会被级连删除级连
22、删除25255.3 5.3 用户定义的完整性用户定义的完整性o用户定义的完整性就是针对用户定义的完整性就是针对某一具体某一具体应用应用的数据必须满足的语义要求的数据必须满足的语义要求 oRDBMSRDBMS提供定义和检验机制,而不必由提供定义和检验机制,而不必由应用程序承担应用程序承担26265.3 5.3 用户定义的完整性用户定义的完整性5.3.1 5.3.1 属性上的约束条件的定义属性上的约束条件的定义5.3.2 5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5.3.3 5.3.3 元组上的约束条件的定义元组上的约束条件的定义 5.3.4 5.3.4 元组上的约
23、束条件检查和违约处理元组上的约束条件检查和违约处理27275.3.1 5.3.1 属性上的约束条件的定义属性上的约束条件的定义oCREATE TABLECREATE TABLE时定义时定义n 列值非空列值非空(NOT NULL)(NOT NULL)n 列值唯一列值唯一(UNIQUE)(UNIQUE)n 检查列值是否满足一个布尔表达式检查列值是否满足一个布尔表达式(CHECK)(CHECK)2828属性上的约束条件的定义属性上的约束条件的定义(续续)1.1.不允许取空值不允许取空值 例例55定义定义SCSC表时,说明表时,说明SnoSno、CnoCno、GradeGrade属性属性不允许取空值。
24、不允许取空值。CREATE TABLE SCCREATE TABLE SC (SnoSno CHAR(9)CHAR(9)NOT NULLNOT NULL,CnoCno CHAR(4)CHAR(4)NOT NULLNOT NULL,Grade SMALLINT Grade SMALLINT NOT NULLNOT NULL,PRIMARY KEY(Sno,CnoPRIMARY KEY(Sno,Cno)/*如果在表级定义实体完整性,隐含了如果在表级定义实体完整性,隐含了SnoSno,CnoCno不不允许取空值允许取空值,则在列级不允许取空值的定义就不必写,则在列级不允许取空值的定义就不必写了了*/
25、););CREATE TABLE SCCREATE TABLE SC (SnoSno CHAR(9)CHAR(9),CnoCno CHAR(4)CHAR(4),Grade SMALLINT Grade SMALLINT NOT NULLNOT NULL,PRIMARY KEY(Sno,CnoPRIMARY KEY(Sno,Cno););2929属性上的约束条件的定义属性上的约束条件的定义(续续)2.2.列值唯一列值唯一 例例66建立部门表建立部门表DEPTDEPT,要求部门名称,要求部门名称DnameDname属性属性列取值唯一,部门编号列取值唯一,部门编号DeptnoDeptno属性列为主码
26、属性列为主码 CREATE TABLE DEPTCREATE TABLE DEPT (Deptno (Deptno NUMERIC(2)NUMERIC(2),DnameDname CHAR(9)CHAR(9)UNIQUEUNIQUE,/,/*要求要求DnameDname列值唯一列值唯一*/Location CHAR(10)Location CHAR(10),PRIMARY KEY(DeptnoPRIMARY KEY(Deptno);3030属性上的约束条件的定义属性上的约束条件的定义(续续)3.3.用用CHECKCHECK短语指定列值应满足的条件短语指定列值应满足的条件o 例例77Studen
27、tStudent表的表的SsexSsex只允许取只允许取“男男”或或“女女”CREATE TABLE StudentCREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,(Sno CHAR(9)PRIMARY KEY,Sname CHAR(8)NOT NULL,Sname CHAR(8)NOT NULL,Ssex Ssex CHAR(2)CHAR(2)CHECK(SsexCHECK(Ssex IN IN(男男,女女),/*性别属性性别属性SsexSsex只允许取只允许取 男男 或或 女女 */Sage SMALLINT,Sage SMALLINT,Sdept
28、 Sdept CHAR(20);CHAR(20);3131属性上的约束条件的定义属性上的约束条件的定义(续续)o 例例88SCSC表的表的GradeGrade只允许取只允许取0-1000-100的数字的数字 CREATE TABLE SCCREATE TABLE SC (Sno (Sno CHAR(9),CHAR(9),Cno Cno CHAR(4)NOT NULL,CHAR(4)NOT NULL,Grade SMALLINT Grade SMALLINT CHECK(Grade=0 AND Grade=0 AND Grade=100),/*Grade Grade属性只允许取属性只允许取0-1
29、000-100的数字的数字*/PRIMARY KEY(Sno,Cno PRIMARY KEY(Sno,Cno),),FOREIGN KEY(Sno)REFERENCES Student(Sno FOREIGN KEY(Sno)REFERENCES Student(Sno),),FOREIGN KEY(Cno)REFERENCES Course(Cno FOREIGN KEY(Cno)REFERENCES Course(Cno)32325.3.2 5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理o插入元组或修改属性的值时,插入元组或修改属性的值时,RDBMSRDBMS检检
30、查属性上的约束条件是否被满足查属性上的约束条件是否被满足o如果不满足则操作被拒绝执行如果不满足则操作被拒绝执行 33335.3.3 5.3.3 元组上的约束条件的定义元组上的约束条件的定义o在在CREATE TABLECREATE TABLE时可以用时可以用CHECKCHECK短语定短语定义元组上的约束条件,即义元组上的约束条件,即元组级的限元组级的限制制o同属性值限制相比,元组级的限制可同属性值限制相比,元组级的限制可以设置不同属性之间取值的相互约束以设置不同属性之间取值的相互约束条件条件 3434元组上的约束条件的定义元组上的约束条件的定义(续续)例例99当学生的性别是男时当学生的性别是男
31、时,其名字不能以其名字不能以Ms.Ms.打头打头 CREATE TABLE StudentCREATE TABLE Student (Sno CHAR(9),Sname (Sno CHAR(9),Sname CHAR(8)NOT NULL,CHAR(8)NOT NULL,Ssex Ssex CHAR(2),Sage SMALLINT,CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno Sdept CHAR(20),PRIMARY KEY(Sno),),CHECK(Ssex=CHECK(Ssex=女女 OR Sname OR Sname NO
32、T LIKE Ms.%)NOT LIKE Ms.%)/*定义了元组中定义了元组中SnameSname和和 SsexSsex两个两个属性值之间的约束条件属性值之间的约束条件*/)/)n 性别是女性的元组都能通过该项检查;性别是女性的元组都能通过该项检查;n 当性别是男性时,则名字一定不能以当性别是男性时,则名字一定不能以Ms.Ms.打打头头,才能通过检查才能通过检查35355.3.4 5.3.4 元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理o插入元组或修改属性的值时,插入元组或修改属性的值时,RDBMSRDBMS检检查元组上的约束条件是否被满足查元组上的约束条件是否被满足o如果不
33、满足则操作被拒绝执行如果不满足则操作被拒绝执行 36365.4 5.4 完整性约束命名子句完整性约束命名子句o完整性约束命名:完整性约束命名:CONSTRAINTCONSTRAINT约束子句约束子句CONSTRAINT CONSTRAINT PRIMARY KEYPRIMARY KEY短语短语|FOREIGN KEY|FOREIGN KEY短语短语|CHECK|CHECK短语短语3737完整性约束命名子句完整性约束命名子句(续续)例例1010建立学生登记表建立学生登记表StudentStudent,要求学号在,要求学号在90000-9999990000-99999之间,姓名不能取空值,年龄小之
34、间,姓名不能取空值,年龄小于于3030,性别只能是,性别只能是“男男”或或“女女”。n CREATE TABLE StudentCREATE TABLE Student (Sno (Sno NUMERIC(6)NUMERIC(6)CONSTRAINT C1 CONSTRAINT C1 CHECK(SnoCHECK(Sno BETWEEN 90000 AND 99999)BETWEEN 90000 AND 99999),Sname Sname CHAR(20)CHAR(20)CONSTRAINT C2 NOT NULLCONSTRAINT C2 NOT NULL,Sage NUMERIC(3)S
35、age NUMERIC(3)CONSTRAINT C3 CHECK CONSTRAINT C3 CHECK(Sage30)(Sage30),Ssex Ssex CHAR(2)CHAR(2)CONSTRAINT C4 CHECK(SsexCONSTRAINT C4 CHECK(Ssex IN IN(男男,女女),CONSTRAINT StudentKeyCONSTRAINT StudentKey PRIMARY KEY(Sno PRIMARY KEY(Sno)在在StudentStudent表上建立了表上建立了5 5个约束条件,包括主码约束个约束条件,包括主码约束(命命名为名为StudentKe
36、yStudentKey)以及以及C1C1、C2C2、C3C3、C4C4四个列级约束。四个列级约束。3838完整性约束命名子句完整性约束命名子句(续续)o修改表中的完整性限制:修改表中的完整性限制:ALTER TABLEALTER TABLE语句语句n 增加新的约束条件增加新的约束条件(ADD)(ADD)n 修改表中的完整性限制修改表中的完整性限制(DROP-ADD)(DROP-ADD)u先删除原来的约束条件先删除原来的约束条件(DROP)(DROP)u再增加新的约束条件再增加新的约束条件 (ADD)(ADD)n 删除表中原有的完整性限制删除表中原有的完整性限制(DROP)(DROP)3939完
37、整性约束命名子句完整性约束命名子句(续续)例例1313修改表修改表StudentStudent中的约束条件,要求学号中的约束条件,要求学号改为在改为在900000-999999900000-999999之间,年龄由小于之间,年龄由小于3030改改为小于为小于4040n可先删除原来的约束条件,再增加新的约束条件可先删除原来的约束条件,再增加新的约束条件 ALTER TABLE Student ALTER TABLE Student DROP CONSTRAINT C1DROP CONSTRAINT C1;ALTER TABLE Student ALTER TABLE Student ADD CO
38、NSTRAINT C1ADD CONSTRAINT C1 CHECK(Sno CHECK(Sno BETWEEN 900000 AND 999999)BETWEEN 900000 AND 999999),ALTER TABLE Student ALTER TABLE Student DROP CONSTRAINT C3;DROP CONSTRAINT C3;ALTER TABLE Student ALTER TABLE Student ADD CONSTRAINT C3 ADD CONSTRAINT C3 CHECK(Sage40)CHECK(Sage40);4040数据完整性小结数据完整性小
39、结o数据库的完整性是为了保证数据库中存数据库的完整性是为了保证数据库中存储的数据是正确的储的数据是正确的oRDBMSRDBMS完整性实现的机制完整性实现的机制n完整性约束定义机制完整性约束定义机制n完整性检查机制完整性检查机制n违背完整性约束条件时违背完整性约束条件时RDBMSRDBMS应采取的动作应采取的动作4141数据完整性小结数据完整性小结(续)o完整性约束的用途:限制输入到数据库表中的完整性约束的用途:限制输入到数据库表中的值的范围值的范围oSQL ServerSQL Server根据不同用途提供了多种约束根据不同用途提供了多种约束nPRIMARY(PRIMARY(主键主键)约束约束n
40、FOREIGN(FOREIGN(外键外键)约束约束nUNIQUE(UNIQUE(惟一惟一)约束约束nCHECK(CHECK(检查检查)约束约束nNULL(NULL(可否为空可否为空)约束约束nCASCADECASCADE级连引用一致性约束级连引用一致性约束4242数据完整性小结数据完整性小结(续)o当需要在一个表中的多个列上建立约束当需要在一个表中的多个列上建立约束时,只能定义表级约束时,只能定义表级约束o要浏览有关约束的信息可以使用系统存要浏览有关约束的信息可以使用系统存储过程储过程sp_helpconstraintsp_helpconstraint sp_helpconstraint sp
41、_helpconstraint 43435.6 5.6 触发器触发器5.6.1 5.6.1 创建触发器创建触发器 5.6.2 5.6.2 激活触发器激活触发器 5.6.3 5.6.3 删除触发器删除触发器4444触发器触发器(Trigger)(Trigger)o触发器是用户定义在关系表上的一类由触发器是用户定义在关系表上的一类由事件驱动事件驱动的特殊的存储过程的特殊的存储过程n 由服务器自动激活由服务器自动激活n 可以进行更复杂的检查和操作,具有更精可以进行更复杂的检查和操作,具有更精细和更强大的数据控制能力细和更强大的数据控制能力-不是不是SQLSQL规范的内容,但大多规范的内容,但大多DB
42、MSDBMS都支持都支持 4545触发器触发器(续续)o触发器有助于强制引用完整性触发器有助于强制引用完整性n 但强制引用完整性的最好方法是在相关表但强制引用完整性的最好方法是在相关表中定义主键和外键约束中定义主键和外键约束n 只要约束和默认值提供了全部所需的功能,只要约束和默认值提供了全部所需的功能,就应使用约束和默认值就应使用约束和默认值4646定义触发器定义触发器oCREATE TRIGGERCREATE TRIGGER语法格式语法格式 CREATE TRIGGER CREATE TRIGGER BEFORE|AFTER BEFORE|AFTER ON ON FOR EACH ROW|S
43、TATEMENT FOR EACH ROW|STATEMENT WHEN WHEN 4747创建触发器创建触发器-SQL Server 2000-SQL Server 2000语法格式语法格式o CREATE TRIGGER CREATE TRIGGER ON ON|WITH ENCRYPTION WITH ENCRYPTION FOR|AFTER|INSTEAD OF FOR|AFTER|INSTEAD OF INSERT,UPDATE,DELETE INSERT,UPDATE,DELETE AS AS 4848定义触发器定义触发器(续续)o语法说明语法说明:n 创建者:表的创建者:表的拥有
44、者拥有者n 触发器名触发器名n 表名:触发器的目标表表名:触发器的目标表n 触发事件:触发事件:INSERTINSERT、DELETEDELETE、UPDATEUPDATEn 触发器类型触发器类型u行级触发器行级触发器(FOR EACH ROW)(FOR EACH ROW)u语句级触发器语句级触发器(FOR EACH STATEMENT)(FOR EACH STATEMENT)4949定义触发器定义触发器(续续)o语法说明语法说明:n 触发条件触发条件u触发条件为真触发条件为真u省略省略WHENWHEN触发条件触发条件n 触发动作体触发动作体o可以是一个匿名可以是一个匿名SQLSQL过程语句块
45、过程语句块o也可以是对已创建存储过程的调用也可以是对已创建存储过程的调用5050定义触发器定义触发器(续续)o语法说明语法说明:n WITH ENCRYPTIONWITH ENCRYPTION-加密系统分类表加密系统分类表中包含中包含CREATE CREATE TRIGGER TRIGGER 语句文本的条目语句文本的条目5151定义触发器定义触发器(续续)o语句级与行级触发器示例语句级与行级触发器示例n 在在TEACHERTEACHER表上创建一个表上创建一个AFTER UPDATEAFTER UPDATE触发器,触发器,若表若表TEACHERTEACHER有有10001000行,执行语句:行
46、,执行语句:UPDATE UPDATE TEACHER SET DeptnoTEACHER SET Deptno=5;=5;u若为语句级触发器,则执行完该语句后,若为语句级触发器,则执行完该语句后,触发动作只发生一次触发动作只发生一次u若为行级触发器,触发动作将执行若为行级触发器,触发动作将执行10001000次次 5252SQL Server2000SQL Server2000触发器类型触发器类型o可使用可使用FORFOR子句指定触发器的执行时间子句指定触发器的执行时间n AFTERAFTER:在触发它们的语句在触发它们的语句(INSERT(INSERT、UPDATEUPDATE、DELET
47、E)DELETE)完成后执行完成后执行-SQL Server 2000-SQL Server 2000中中AFTERAFTER是默认的触发器是默认的触发器n INSTEAD OFINSTEAD OF:用于替代引起触发器执行的用于替代引起触发器执行的SQLSQL语句语句-只能为每个触发操作定义一个只能为每个触发操作定义一个INSTEAD OFINSTEAD OF触发器触发器5353o触发器语句中使用的两个临时的驻留内触发器语句中使用的两个临时的驻留内存的表存的表oSQL Server 2000SQL Server 2000自动创建和治理自动创建和治理o可以使用这两个表测试某些数据修改的可以使用这
48、两个表测试某些数据修改的效果及设置触发器操作的条件效果及设置触发器操作的条件o不能直接对表中的数据进行更改不能直接对表中的数据进行更改 INSERTEDINSERTED表和表和DELETEDDELETED表表5454oINSERTEDINSERTED表表n 用于存储用于存储INSERTINSERT和和UPDATEUPDATE语句所影响的行的语句所影响的行的副本副本n 在一个插入或更新事务处理中,新建行被同在一个插入或更新事务处理中,新建行被同时添加到时添加到INSERTEDINSERTED表和触发器表中表和触发器表中n INSERTEDINSERTED表中的行是触发器表中新行的副本表中的行是触
49、发器表中新行的副本INSERTEDINSERTED表和表和DELETEDDELETED表表5555oDELETEDDELETED表:表:n 用于存储用于存储DELETEDELETE和和UPDATEUPDATE语句所影响的语句所影响的行的复本行的复本n 在执行在执行DELETEDELETE或或UPDATE UPDATE 语句时,行从语句时,行从触发器表中删除,并传输到触发器表中删除,并传输到 DELETED DELETED 表中表中n DELETEDELETE表和触发器表通常没有相同的行表和触发器表通常没有相同的行INSERTEDINSERTED表和表和DELETEDDELETED表表5656o
50、插入操作插入操作(INSERT)(INSERT):INSERTEDINSERTED表有数据,表有数据,DELETEDDELETED表无数据表无数据 o删除操作删除操作(DELETE)(DELETE):INSERTEDINSERTED表无数据,表无数据,DELETEDDELETED表有数据表有数据 o更新操作更新操作(UPDATE)(UPDATE):INSERTEDINSERTED表有数表有数据据(新数据新数据),DELETEDDELETED表有数据表有数据(旧数据旧数据)INSERTEDINSERTED表和表和DELETEDDELETED表表5757UPDATEUPDATE触发器的工作过程触发
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。