第05章 数据库完整性.pptx
An Introduction to Database System1数据库系统概论数据库系统概论An Introduction to Database System第五章第五章 数据库完整性数据库完整性An Introduction to Database System2第五章第五章第五章第五章 数据库完整性数据库完整性数据库完整性数据库完整性什么是数据库的完整性什么是数据库的完整性什么是数据库的完整性什么是数据库的完整性?n数据的数据的正确性正确性和和相容性相容性n防止不合语义的、不正确的数据进入数据库。防止不合语义的、不正确的数据进入数据库。例例:学生的年龄必须是整数,取值在学生的年龄必须是整数,取值在6-506-50间;间;学生的性别只能是男或女;学生的性别只能是男或女;学生的学号一定是唯一的;学生的学号一定是唯一的;学生所在的系必须是学校已有的系;学生所在的系必须是学校已有的系;n完整性:保证数据库能否真实地反映现实世界完整性:保证数据库能否真实地反映现实世界.区别数据区别数据完整性完整性和和安全性安全性的两个概念。的两个概念。An Introduction to Database System3 完整性约束条件是数据模型的组成部分,完整性约束条件是数据模型的组成部分,约束数据库中数据的语义。约束数据库中数据的语义。检查用户发出的操作请求是否违背了完整检查用户发出的操作请求是否违背了完整性约束条件性约束条件。操作违背了完整性约束条件,则采取一定的操作违背了完整性约束条件,则采取一定的操作违背了完整性约束条件,则采取一定的操作违背了完整性约束条件,则采取一定的操作操作操作操作来保证数据的完整性。来保证数据的完整性。来保证数据的完整性。来保证数据的完整性。为保证完整性,为保证完整性,为保证完整性,为保证完整性,DBMSDBMS必须做到:必须做到:必须做到:必须做到:1 1.完整性约束的定义机制完整性约束的定义机制2.2.完整性的检查完整性的检查机制机制3.3.违约反应违约反应 第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性An Introduction to Database System4第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户定义完整性用户定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 触发器触发器An Introduction to Database System55.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性1.1.实体完整性定义实体完整性定义 在在CREATE TABLECREATE TABLE语句中用语句中用PRIMARY KEYPRIMARY KEY定义定义 码由单字段构成码由单字段构成:定义可以为列级或表级约束;定义可以为列级或表级约束;码由多字段构成:码由多字段构成:定义只能为表级约束;定义只能为表级约束;An Introduction to Database System65.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性 例例11在数据库中,定义在数据库中,定义StudentStudent表的表的SnoSno属性为主码。属性为主码。定义在列级约束定义在列级约束:CREATE TABLE Student CREATE TABLE Student (Sno CHAR(8),(Sno CHAR(8),Sname CHAR(8),Sname CHAR(8),Sage INT);Sage INT);定义在表级约束:定义在表级约束:CREATE TABLE Student CREATE TABLE Student (Sno CHAR(8)(Sno CHAR(8),Sname CHAR(8),Sname CHAR(8),Sage INT Sage INT,););PRIMARY KEY,PRIMARY KEY(Sno););An Introduction to Database System75.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性 例例22在在SCSC表中定义表中定义(Sno,Cno)(Sno,Cno)为主码。为主码。CREATE TABLE SC CREATE TABLE SC (Sno CHAR(5),(Sno CHAR(5),Cno CHAR(2),Cno CHAR(2),Grade SMALLINT,Grade SMALLINT,PRIMARY KEY(Sno,Cno)PRIMARY KEY(Sno,Cno););An Introduction to Database System85.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性2.2.2.2.实体完整性检查和违约处理实体完整性检查和违约处理实体完整性检查和违约处理实体完整性检查和违约处理 (1)(1)完整性检查完整性检查 当用户进行当用户进行插入记录插入记录或或修改主码修改主码时,时,DBMSDBMS系统自系统自动检查:动检查:主主码值是否惟一;码值是否惟一;每个每个主属性值是否为空。主属性值是否为空。(2)(2)违约处理违约处理 拒绝操作。拒绝操作。An Introduction to Database System95.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性2.2.2.2.实体完整性检查和违约处理实体完整性检查和违约处理实体完整性检查和违约处理实体完整性检查和违约处理 (3)(3)检查主码是否惟一的方法检查主码是否惟一的方法 全表扫描全表扫描依次判断表中每一个记录的主码值与插入记依次判断表中每一个记录的主码值与插入记录的主码值是否一致。录的主码值是否一致。缺点缺点:效率低:效率低 利用利用主码的主码的B B索引索引优点优点:效率高:效率高An Introduction to Database System105.1 5.1 5.1 5.1 实体完整性实体完整性实体完整性实体完整性keyF1F2F332520159379658471517304154656968255112 3066 783 715 20 25 30 4151 54 6568 69 71 7679 84 93An Introduction to Database System11第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户定义完整性用户定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 触发器触发器An Introduction to Database System125.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性1.1.1.1.参照完整性定义参照完整性定义参照完整性定义参照完整性定义 在在CREATE TABLECREATE TABLE语句中:语句中:用用 FOREIGN KEY FOREIGN KEY 短语定义外码列;短语定义外码列;用用 REFERENCES REFERENCES 短语指明外码参照哪个表的主短语指明外码参照哪个表的主码。码。An Introduction to Database System135.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性 例例33在在SCSC表中的参照完整性。表中的参照完整性。CREATE TABLE SC CREATE TABLE SC CREATE TABLE SC CREATE TABLE SC (Sno CHAR(8)(Sno CHAR(8)(Sno CHAR(8)(Sno CHAR(8)NOT NULLNOT NULLNOT NULLNOT NULL,Cno CHAR(3)NOT NULL,Cno CHAR(3)NOT NULL,Cno CHAR(3)NOT NULL,Cno CHAR(3)NOT NULL,Grade SMALLINT,Grade SMALLINT,Grade SMALLINT,Grade SMALLINT,PRIMARY KEY(Sno,Cno),PRIMARY KEY(Sno,Cno),PRIMARY KEY(Sno,Cno),PRIMARY KEY(Sno,Cno),FOREIGN KEY(Cno)REFERENCES course(Cno)FOREIGN KEY(Cno)REFERENCES course(Cno)FOREIGN KEY(Cno)REFERENCES course(Cno)FOREIGN KEY(Cno)REFERENCES course(Cno)ON DELETE CASCADEON DELETE CASCADEON DELETE CASCADEON DELETE CASCADE ););););REFERENCES student(Sno),REFERENCES student(Sno),REFERENCES student(Sno),REFERENCES student(Sno),An Introduction to Database System145.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性 例例33在在SCSC表中的参照完整性。表中的参照完整性。ALTER TABLE SC ALTER TABLE SC ALTER TABLE SC ALTER TABLE SC ADD FOREIGN KEY(SNO)ADD FOREIGN KEY(SNO)ADD FOREIGN KEY(SNO)ADD FOREIGN KEY(SNO)REFERENCES STUDENT(SNO)REFERENCES STUDENT(SNO)REFERENCES STUDENT(SNO)REFERENCES STUDENT(SNO)An Introduction to Database System152.2.参照完整性检查和违约处理参照完整性检查和违约处理参照完整性检查和违约处理参照完整性检查和违约处理 对被对被参照表和参照表进行参照表和参照表进行增、删、改增、删、改操作操作时进行检查时进行检查有四种情况可能破坏参照完整性:有四种情况可能破坏参照完整性:参照表中参照表中l插入新插入新元组;元组;l修改外码值;修改外码值;被参照表中被参照表中l删除元组删除元组;l修改主码值。修改主码值。5.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性An Introduction to Database System16 当参照完整性不一致时,系统采取以下策略:当参照完整性不一致时,系统采取以下策略:n拒绝执行拒绝执行(默认策略)(默认策略)n级联操作级联操作(CASCADE)当删除或修改被参照表的一个元组造成与当删除或修改被参照表的一个元组造成与参照表不一致时,则删除或修改参照表中所有参照表不一致时,则删除或修改参照表中所有不一致的元组。不一致的元组。n设置为空设置为空(SET-NULL)当删除或修改被参照表的一个元组造成与当删除或修改被参照表的一个元组造成与参照表不一致时,则将参照表中所有造成不一参照表不一致时,则将参照表中所有造成不一致的元组对应属性置空。致的元组对应属性置空。5.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性 定义参照完整性时,除了定义外码,还应定义参照完整性时,除了定义外码,还应定义外码定义外码是否级联是否级联、是否为空是否为空。An Introduction to Database System17例:要删除例:要删除StudentStudent关系中关系中Sno=Sno=950001950001的元组,而的元组,而SCSC关系中有关系中有4 4个元组个元组的的SnoSno都等于都等于950001950001。n置空值删除置空值删除:将将SCSC关系中所有关系中所有Sno=950001Sno=950001的元组的元组SnoSno置空。置空。n级联删除级联删除:将将SCSC关系中所有关系中所有4 4个个Sno=950001Sno=950001的元组一的元组一起删除。依此类推可以继续级联下去。起删除。依此类推可以继续级联下去。n受限删除受限删除:系统将拒绝执行此删除操作。系统将拒绝执行此删除操作。5.2 5.2 5.2 5.2 参照完整性参照完整性参照完整性参照完整性An Introduction to Database System18第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户定义完整性用户定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 触发器触发器An Introduction to Database System195.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性1.1.1.1.属性上约束条件的定义属性上约束条件的定义属性上约束条件的定义属性上约束条件的定义 使用使用CREATE TABLECREATE TABLE语句在定义属性的同时,语句在定义属性的同时,定义定义对属性值的限制对属性值的限制。包括:包括:列值非空列值非空(NOT NULL)(NOT NULL)列值唯一列值唯一(UNIQUE)(UNIQUE)检查列值是否满足一个布尔表达式检查列值是否满足一个布尔表达式(CHECK(CHECK子子句句)。An Introduction to Database System205.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性 (1)(1)不允许取空值不允许取空值 例例例例5555在定义在定义在定义在定义SCSCSCSC表时,说明表时,说明表时,说明表时,说明SnoSnoSnoSno、CnoCnoCnoCno属性不取空属性不取空属性不取空属性不取空 CREATE TABLE SC CREATE TABLE SC (Sno CHAR(5)(Sno CHAR(5)NOT NULLNOT NULL,Cno CHAR(2)Cno CHAR(2)NOT NULLNOT NULL,Grade SMALLINT,Grade SMALLINT,PRIMARY KEY(Sno,Cno);PRIMARY KEY(Sno,Cno);An Introduction to Database System215.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性(2)(2)列值惟一列值惟一 例例例例6666建立部门表建立部门表建立部门表建立部门表DeptDeptDeptDept,要求部门名称,要求部门名称,要求部门名称,要求部门名称DnameDnameDnameDname惟一,惟一,惟一,惟一,部门编号为主码。部门编号为主码。部门编号为主码。部门编号为主码。CREATE TABLE Dept CREATE TABLE Dept (Dno NUMERIC(2)NOT NULL,(Dno NUMERIC(2)NOT NULL,Dname CHAR(20)Dname CHAR(20)UNIQUE UNIQUE,Location CHAR(10),Location CHAR(10),PRIMARY KEY(Dno)PRIMARY KEY(Dno););An Introduction to Database System225.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性(2)(2)列值惟一列值惟一 例例例例6666补充补充补充补充 若部门表若部门表若部门表若部门表DeptDeptDeptDept已建立,添加部门名称已建立,添加部门名称已建立,添加部门名称已建立,添加部门名称DnameDnameDnameDname惟一的约束。惟一的约束。惟一的约束。惟一的约束。ALTER TABLE Dept ALTER TABLE Dept ADD UNIQUE(Dname);ADD UNIQUE(Dname);An Introduction to Database System235.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性 例例例例7Student7Student7Student7Student表中表中表中表中SsexSsexSsexSsex只允许取只允许取只允许取只允许取“男男男男”和和和和“女女女女”。CREATE TABLE Student CREATE TABLE Student (Sno CHAR(5)PRIMARY KEY,(Sno CHAR(5)PRIMARY KEY,Sname CHAR(8)NOT NULL,Sname CHAR(8)NOT NULL,Ssex CHAR(2)Ssex CHAR(2)CHECK CHECK(Ssex IN(Ssex IN(男男男男,女女女女),Sage SMALLINT,Sage SMALLINT,Sdept CHAR(20)Sdept CHAR(20););(3)(3)用用CHECKCHECK短语短语指定列值应该满足的条件指定列值应该满足的条件An Introduction to Database System245.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性 例例例例7777补充补充补充补充 向向向向StudentStudentStudentStudent表添加表添加表添加表添加SsexSsexSsexSsex只许取只许取只许取只许取“男男男男”和和和和“女女女女”的的的的约束。约束。约束。约束。ALTER TABLE Student ALTER TABLE Student ADD CHECK ADD CHECK(Ssex IN(Ssex IN(男男男男,女女女女););(3)(3)用用CHECKCHECK短语短语指定列值应该满足的条件指定列值应该满足的条件An Introduction to Database System255.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性 例例例例8888在定义在定义在定义在定义SCSCSCSC表时,说明表时,说明表时,说明表时,说明GradeGradeGradeGrade应该在应该在应该在应该在0 0 0 0和和和和100100100100之间。之间。之间。之间。CREATE TABLE SC CREATE TABLE SC (Sno CHAR(5)NOT NULL,(Sno CHAR(5)NOT NULL,Cno CHAR(2)NOT NULL,Cno CHAR(2)NOT NULL,Grade SMALLINT Grade SMALLINT CHECK(Grade=0 AND Grade=0 AND Grade=100),PRIMARY KEY(Sno,Cno)PRIMARY KEY(Sno,Cno););(3)(3)用用CHECKCHECK短语短语指定列值应该满足的条件指定列值应该满足的条件An Introduction to Database System265.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性2.2.属性上约束条件检查和违约处理属性上约束条件检查和违约处理 当往表中当往表中插入插入元组或元组或修改修改属性的值时,属性的值时,RDBMSRDBMS就就检查属性上的约束条件检查属性上的约束条件是否被满足,是否被满足,如果不满足操作被拒绝执行。如果不满足操作被拒绝执行。An Introduction to Database System275.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性3.3.3.3.元组上的约束条件的定义元组上的约束条件的定义元组上的约束条件的定义元组上的约束条件的定义 在在CREATE TABLECREATE TABLE语句可以用语句可以用CHECKCHECK短语定义元组短语定义元组上的约束条件,即元组级限制上的约束条件,即元组级限制 元组级限制可以设置不同属性之间的取值的相互元组级限制可以设置不同属性之间的取值的相互约束条件。约束条件。An Introduction to Database System285.3 5.3 5.3 5.3 用户定义的完整性用户定义的完整性用户定义的完整性用户定义的完整性3.3.3.3.元组上的约束条件的定义元组上的约束条件的定义元组上的约束条件的定义元组上的约束条件的定义 在在CREATE TABLECREATE TABLE语句可以用语句可以用CHECKCHECK短语定义元组短语定义元组上的约束条件,即元组级限制上的约束条件,即元组级限制 元组级限制可以设置不同属性之间的取值的相互元组级限制可以设置不同属性之间的取值的相互约束条件。约束条件。4.4.4.4.元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 例:当学生的性别是男时,姓名不能以例:当学生的性别是男时,姓名不能以例:当学生的性别是男时,姓名不能以例:当学生的性别是男时,姓名不能以Ms.Ms.Ms.Ms.开头开头开头开头 An Introduction to Database System29第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户定义完整性用户定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 触发器触发器An Introduction to Database System305.4 5.4 5.4 5.4 完整性约束命名子句完整性约束命名子句完整性约束命名子句完整性约束命名子句 SQLSQL在提供了完整性约束命名子句在提供了完整性约束命名子句 CONSTRAINTCONSTRAINT,用来对完整性约束条件进行命名。用来对完整性约束条件进行命名。1.1.1.1.完整性约束命名子句完整性约束命名子句完整性约束命名子句完整性约束命名子句 格式:格式:CONSTRAINT CONSTRAINT PRIMARY KEY PRIMARY KEY短语短语|FOREIGN KEY FOREIGN KEY短语短语|CHECK CHECK短语短语 放置在任何一个放置在任何一个约束短语的前面。约束短语的前面。An Introduction to Database System31 例例例例10101010建立学生表建立学生表建立学生表建立学生表studentstudentstudentstudent,姓名不能取空值,年龄小,姓名不能取空值,年龄小,姓名不能取空值,年龄小,姓名不能取空值,年龄小于于于于30303030,性别只能取,性别只能取,性别只能取,性别只能取“男男男男”或或或或“女女女女”。CREATE TABLE StudentCREATE TABLE Student (Sno NUMERIC(6)Sno NUMERIC(6)Sname CHAR(8)Sname CHAR(8)NOT NULL,NOT NULL,Ssex CHAR(2)Ssex CHAR(2)CHECK(Ssex IN(CHECK(Ssex IN(男男男男,女女女女),),Sage INTSage INT CHECK(Sage 30),CHECK(Sage 30),PRIMARY KEY(Sno)PRIMARY KEY(Sno););CONSTRAINT C1CONSTRAINT C1 CONSTRAINTCONSTRAINT C2C2 CONSTRAINT C3CONSTRAINT C3 CONSTRAINT CONSTRAINT StuKeyStuKey An Introduction to Database System325.4 5.4 5.4 5.4 完整性约束命名子句完整性约束命名子句完整性约束命名子句完整性约束命名子句 2.2.2.2.修改表中的完整性限制修改表中的完整性限制修改表中的完整性限制修改表中的完整性限制 (1)(1)(1)(1)删除完整性限制删除完整性限制删除完整性限制删除完整性限制 格式:格式:DROP CONSTRAINT DROP CONSTRAINT 定义约束时未命名,系统会自动命名。定义约束时未命名,系统会自动命名。例例例例12 12 12 12 去掉去掉去掉去掉 例例例例10 student10 student10 student10 student表中对性别的限制。表中对性别的限制。表中对性别的限制。表中对性别的限制。ALTER TABLE Student ALTER TABLE Student DROP DROP CONSTRAINTCONSTRAINT C3;C3;不能独立使不能独立使用用 (2)(2)(2)(2)修改完整性限制修改完整性限制修改完整性限制修改完整性限制 先删除,先删除,再添加。再添加。An Introduction to Database System33第第第第五五五五章章章章 数据库完整性数据库完整性数据库完整性数据库完整性5.1 5.1 实体完整性实体完整性5.2 5.2 参照完整性参照完整性5.3 5.3 用户定义完整性用户定义完整性5.4 5.4 完整性约束命名子句完整性约束命名子句5.5 5.5 触发器触发器An Introduction to Database System345.5 5.5 5.5 5.5 触发器触发器触发器触发器1.1.1.1.触发器触发器触发器触发器 (1)(1)(1)(1)什么是触发器?什么是触发器?什么是触发器?什么是触发器?触发器是一种特殊的存储过程触发器是一种特殊的存储过程 作用:作用:用来实现当使用用来实现当使用update update、insertinsert、deletedelete对对表进行操作时,表进行操作时,自动触发自动触发的处理方法;的处理方法;实现复杂的业务要求,类似于实现复杂的业务要求,类似于约束约束 保证数据的一致性。保证数据的一致性。An Introduction to Database System355.5 5.5 5.5 5.5 触发器触发器触发器触发器1.1.1.1.触发器触发器触发器触发器 (2)(2)(2)(2)触发器的分类触发器的分类触发器的分类触发器的分类 After触发器:(默认类型)触发器:(默认类型)触发触发Insert、Update、Delete动作之后执行。动作之后执行。(表中数据已经变动之后)(表中数据已经变动之后)Instead of触发器:触发器:当执行当执行Insert、Update、Delete操作时用其操作时用其它操作来代替。它操作来代替。(操作不做,是完成触发器定义的操作操作不做,是完成触发器定义的操作)An Introduction to Database System365.5 5.5 5.5 5.5 触发器触发器触发器触发器2.2.2.2.定义触发器定义触发器定义触发器定义触发器 无论在无论在“企业管理器企业管理器”和和“查询分析器查询分析器”中,都中,都用用CREATE TRIGGERCREATE TRIGGER语句创建触发器。语句创建触发器。格式:格式:(P161)Create Trigger on for|after|instead of delete,insert,update as 触发器的类型触发器的类型触发事件触发事件An Introduction to Database System375.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例1111创建一个向学生表添加新记录时显示欢迎信创建一个向学生表添加新记录时显示欢迎信创建一个向学生表添加新记录时显示欢迎信创建一个向学生表添加新记录时显示欢迎信息的触发器。息的触发器。息的触发器。息的触发器。Create Trigger T_InOn studentafter insertasprint 欢迎新同学的到来!欢迎新同学的到来!An Introduction to Database System385.5 5.5 5.5 5.5 触发器触发器触发器触发器3.3.3.3.触发器工作原理触发器工作原理触发器工作原理触发器工作原理 (1)(1)触发器工作时建立两个表:触发器工作时建立两个表:inserted表:表:存储存储insert和和update语句所影响的数据行副本语句所影响的数据行副本 insertedinserted中的行是触发器表中新行的副本。中的行是触发器表中新行的副本。deleted表:表:存储存储delete和和update语句所影响的数据行副本语句所影响的数据行副本 deleted中的行是从触发器表中删除的行。中的行是从触发器表中删除的行。触发器作用的表触发器作用的表和和deleted表没有相同的行表没有相同的行 An Introduction to Database System395.5 5.5 5.5 5.5 触发器触发器触发器触发器3.3.3.3.触发器工作原理触发器工作原理触发器工作原理触发器工作原理 (2)(2)这两个表的特点:这两个表的特点:系统自动维护系统自动维护 对用户而言,是只读的对用户而言,是只读的 表结构与触发器作用的表结构相同表结构与触发器作用的表结构相同 与触发器同时存在与触发器同时存在 (触发器运行结束,系统自动删除这两表)(触发器运行结束,系统自动删除这两表)An Introduction to Database System405.5 5.5 5.5 5.5 触发器触发器触发器触发器3.3.3.3.触发器工作原理触发器工作原理触发器工作原理触发器工作原理 (3)(3)各种操作时触发器的工作:各种操作时触发器的工作:insertinsertinsertinsert操作时触发器的工作操作时触发器的工作操作时触发器的工作操作时触发器的工作 insertinsert触发器将触发执行触发器将触发执行 新记录会添加到基本表和新记录会添加到基本表和insertedinserted表。表。deletedeletedeletedelete操作时触发器的工作操作时触发器的工作操作时触发器的工作操作时触发器的工作 deletedelete触发器将触发执行触发器将触发执行 被删除的记录会存放到被删除的记录会存放到deleteddeleted表中。表中。updateupdateupdateupdate操作时触发器的工作操作时触发器的工作操作时触发器的工作操作时触发器的工作 相当于插入一条新纪录,删除一条旧记录。相当于插入一条新纪录,删除一条旧记录。An Introduction to Database System415.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例2222创建一个限制年龄不能小于创建一个限制年龄不能小于创建一个限制年龄不能小于创建一个限制年龄不能小于10101010的触发器的触发器的触发器的触发器 CREATE TRIGGER t1 on StudentFOR Insert,UpdateASIF()10 BEGIN PRINT 年龄不能小于年龄不能小于10,操作失败,操作失败 ROLLBACK END;select sage from insertedselect sage from insertedAn Introduction to Database System425.5 5.5 5.5 5.5 触发器触发器触发器触发器4.4.4.4.建立触发器的条件建立触发器的条件建立触发器的条件建立触发器的条件 CREATE TRIGGER语句必须是批处理语句中的语句必须是批处理语句中的第一条;第一条;只有只有表的拥有者表的拥有者可以创建触发器;可以创建触发器;一个表只能创建一定数量的触发器;一个表只能创建一定数量的触发器;在同一在同一模式模式下,触发器名必须惟一;下,触发器名必须惟一;当触发器被激活时,只有触发条件为真时触发动当触发器被激活时,只有触发条件为真时触发动作体才执行。作体才执行。An Introduction to Database System435.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例3333为为为为studentstudentstudentstudent表建立一个触发器表建立一个触发器表建立一个触发器表建立一个触发器t2t2t2t2,禁止删除学号,禁止删除学号,禁止删除学号,禁止删除学号为为为为0215122021512202151220215122的学生的学生的学生的学生create trigger t2 on studentfor update,deleteas if(select sno from deleted)=0215122)begin print 不允许删除该学生,操作失败!不允许删除该学生,操作失败!rollback endAn Introduction to Database System445.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例4444为为为为studentstudentstudentstudent表建立一个触发器表建立一个触发器表建立一个触发器表建立一个触发器t3t3t3t3,要求要求要求要求在更新操在更新操在更新操在更新操作中不能修改学号。作中不能修改学号。作中不能修改学号。作中不能修改学号。CREATE TRIGGER t3 ON Student FOR Update AS IF Update(sno)BEGIN PRINT 学号不允许修改!学号不允许修改!ROLLBACK END An Introduction to Database System455.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例5555建立触发器建立触发器建立触发器建立触发器t4t4t4t4,要求插入的年龄值比表中记录的,要求插入的年龄值比表中记录的,要求插入的年龄值比表中记录的,要求插入的年龄值比表中记录的SageSageSageSage都大都大都大都大。create trigger t4 on student for update,insert as if(select sage from inserted)=(select sage from inserted)=(select max(sage)from student)(select max(sage)from student)begin print rollback end 例例例例66建立触发器建立触发器建立触发器建立触发器t5t5,要求修改的年龄比原来的,要求修改的年龄比原来的,要求修改的年龄比原来的,要求修改的年龄比原来的SageSage大大大大An Introduction to Database System465.5 5.5 5.5 5.5 触发器触发器触发器触发器 例例例例6666定义触发器,要求为教师表定义触发器,要求为教师表定义触发器,要求为教师表定义触发器,要求为教师表teacherteacherteacherteacher插入或修改插入或修改插入或修改插入或修改信息时教授的工资不能低于信息时教授的工资不能低于信息时教授