数据库原理及应用18 数据库完整性.ppt

上传人:精*** 文档编号:880692 上传时间:2024-03-10 格式:PPT 页数:54 大小:243KB
下载 相关 举报
数据库原理及应用18 数据库完整性.ppt_第1页
第1页 / 共54页
数据库原理及应用18 数据库完整性.ppt_第2页
第2页 / 共54页
数据库原理及应用18 数据库完整性.ppt_第3页
第3页 / 共54页
数据库原理及应用18 数据库完整性.ppt_第4页
第4页 / 共54页
数据库原理及应用18 数据库完整性.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、数据库完整性数据库完整性数据库完整性数据库完整性什么是数据库完整性:什么是数据库完整性:防止数据库中存在不符合语义的数据防止数据库中存在不符合语义的数据数据的正确性和相容性数据的正确性和相容性例例:学生的年龄必须是整数,学生的年龄必须是整数,学生的性别只能是男或女;学生的性别只能是男或女;学生的学号一定是唯一的;学生的学号一定是唯一的;学生所在的系必须是学校开设的系学生所在的系必须是学校开设的系2数据库原理及应用-SQL DML数据库完整性数据库完整性DBMSDBMS维护数据库完整性的措施:维护数据库完整性的措施:1 1、提供、提供定义完整性定义完整性约束条件的机制。由约束条件的机制。由SQL

2、SQL中中的的DDLDDL语句来实现,其定义作为语句来实现,其定义作为数据库模式数据库模式的的一部分,被一部分,被存入数据字典存入数据字典中。中。2 2、提供、提供完整性检查完整性检查的方法。在更新操作或事的方法。在更新操作或事务提交时检查是否违背了完整性约束条件。务提交时检查是否违背了完整性约束条件。3 3、违约处理违约处理。若操作违背了完整性约束,则。若操作违背了完整性约束,则采取一定措施:采取一定措施:拒绝执行该操作拒绝执行该操作级连(级连(cascadecascade)执行其他操作)执行其他操作3数据库原理及应用-SQL DML主要内容主要内容实体完整性实体完整性参照完整性参照完整性用

3、户定义的完整性用户定义的完整性完整性约束命名子句完整性约束命名子句触发器触发器小结小结4数据库原理及应用-SQL DML实体完整性实体完整性实体完整性定义实体完整性定义在在CREATE TABLECREATE TABLE中用中用PRIMARY KEYPRIMARY KEY定义定义列级列级约束条件(码中单属性)约束条件(码中单属性)表级表级约束条件(码中单属性、多属性)约束条件(码中单属性、多属性)5数据库原理及应用-SQL DML实体完整性实体完整性例例1 1 将将studentstudent表中的表中的snosno属性定义为码属性定义为码 CREATE TABLE studentCREATE

4、 TABLE student(SnoSno char(9)char(9)primary keyprimary key,SnameSname char(20),char(20),Sage Sage intint)或或 CREATE TABLE studentCREATE TABLE student(SnoSno char(9),char(9),SnameSname char(20),char(20),Sage Sage intint,primary primary key(Snokey(Sno)6数据库原理及应用-SQL DML实体完整性实体完整性例例2 2 将将SCSC表中的表中的SnoSno

5、,CnoCno属性组定义为码属性组定义为码 Create table scCreate table sc(SnoSno char(9),char(9),CnoCno char(4),char(4),Grade Grade smallintsmallint,Primary Primary key(Sno,Cnokey(Sno,Cno)Create table scCreate table sc(SnoSno char(9)char(9)primary keyprimary key,CnoCno char(4)char(4)primary keyprimary key,Grade Grade sm

6、allintsmallint)7数据库原理及应用-SQL DML实体完整性实体完整性实体完整性检查和违约处理实体完整性检查和违约处理用用primary keyprimary key定义了主码后,当用户程序对定义了主码后,当用户程序对基本表插入或者更新主码列值时,基本表插入或者更新主码列值时,DBMSDBMS进行下进行下列的检查:列的检查:(1)(1)检查主码值检查主码值是否唯一是否唯一,若不唯一则拒绝插,若不唯一则拒绝插入或修改入或修改(2)(2)检查主码的各个属性检查主码的各个属性是否为空是否为空,只要有一,只要有一个为空就拒绝插入或修改个为空就拒绝插入或修改返回返回8数据库原理及应用-SQ

7、L DML参照完整性参照完整性参照完整性定义参照完整性定义在在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY短语定短语定义哪些列为外码,用义哪些列为外码,用REFERENCESREFERENCES短语指明短语指明这些外码参照哪些表的主码这些外码参照哪些表的主码9数据库原理及应用-SQL DML参照完整性参照完整性例例 定义定义SCSC中的完整性约束中的完整性约束CREATE TABLECREATE TABLE SC SC(SnoSno char(9),char(9),CnoCno char(4),char(4),Grade Grade sm

8、allintsmallint,Primary Primary key(Sno,Cnokey(Sno,Cno),),Foreign Foreign key(Snokey(Sno)references)references student(Snostudent(Sno),Foreign Foreign key(Cnokey(Cno)references)references course(Cnocourse(Cno))10数据库原理及应用-SQL DML参照完整性参照完整性或或CREATE TABLECREATE TABLE SC SC(SnoSno char(9)char(9)reference

9、s references student(Snostudent(Sno),CnoCno char(4)char(4)references references course(Cnocourse(Cno),Grade Grade smallintsmallint,Primary Primary key(Sno,Cnokey(Sno,Cno))11数据库原理及应用-SQL DML参照完整性参照完整性参照完整性检查和违约处理参照完整性检查和违约处理参照表(参照表(SCSC)可能会破坏完整性的操作)可能会破坏完整性的操作 SCSC表中插入新的元组表中插入新的元组修改修改SCSC表中元组的表中元组的Sn

10、oSno属性值属性值DBMSDBMS将拒绝该操作将拒绝该操作12数据库原理及应用-SQL DML参照完整性参照完整性被参照表被参照表(student)(student)的操作情况的操作情况 从从studentstudent表中删除元组表中删除元组修改修改studentstudent表中某元组的表中某元组的SnoSno属性的值属性的值DBMSDBMS可以可以拒绝拒绝该操作,可以该操作,可以级连删除更新级连删除更新,也,也可以将参照表中相应的外码值可以将参照表中相应的外码值置空置空。置空操作出现的情况置空操作出现的情况学生(学生(学号学号,姓名,性别,姓名,性别,专业号专业号,年龄),年龄)专业(

11、专业(专业号专业号,专业名),专业名)13数据库原理及应用-SQL DML参照完整性参照完整性对违反了参照完整性的操作,系统选用默对违反了参照完整性的操作,系统选用默认策略,即认策略,即拒绝删除拒绝删除,若想让系统采取其,若想让系统采取其他策略,必须在建表时显式地说明他策略,必须在建表时显式地说明14数据库原理及应用-SQL DML参照完整性参照完整性例:显式说明参照完整性的违约处理示例例:显式说明参照完整性的违约处理示例CREATE TABLE SCCREATE TABLE SC(SnoSno char(9)not null,char(9)not null,CnoCno char(4)not

12、 null,char(4)not null,Grade Grade smallintsmallint,Primary Primary key(Sno,Cnokey(Sno,Cno),),Foreign Foreign key(Snokey(Sno)references)references student(Snostudent(Sno)on delete cascadeon delete cascadeon update cascadeon update cascade,Foreign Foreign key(Cnokey(Cno)references)references course(Cn

13、ocourse(Cno)on delete no actionon delete no actionon update cascadeon update cascade)返回返回演示演示演示演示15数据库原理及应用-SQL DML用户定义的完整性用户定义的完整性针对某一具体应用的数据必须满足的语义针对某一具体应用的数据必须满足的语义要求要求目前的目前的RDBMSRDBMS都提供了都提供了定义和检验定义和检验这类完这类完整性的机制,减轻了应用程序的负担整性的机制,减轻了应用程序的负担两类用户定义的完整性两类用户定义的完整性属性上的约束条件(列级)属性上的约束条件(列级)元组上的约束条件(表级)元

14、组上的约束条件(表级)16数据库原理及应用-SQL DML属性上的约束条件属性上的约束条件属性上的约束条件定义(属性上的约束条件定义(create tablecreate table)列值非空(列值非空(not nullnot null)列值唯一(列值唯一(uniqueunique)检查列值是否满足一个布尔表达式(条件表达检查列值是否满足一个布尔表达式(条件表达式)(式)(checkcheck)默认值定义默认值定义(default)(default)(sqlserversqlserver)使用使用 INSERT INSERT 语句时,如果没有提供值,则默认值语句时,如果没有提供值,则默认值会提

15、供值会提供值17数据库原理及应用-SQL DML属性上的约束条件属性上的约束条件例:例:对表对表student(Sno,Sname,Sage,Ssex,Sdeptstudent(Sno,Sname,Sage,Ssex,Sdept)要求:要求:SnoSno为主码为主码 SnameSname唯一且不空,年龄不空唯一且不空,年龄不空 SsexSsex只允许取只允许取“男男”或或“女女”若没有插入若没有插入SdeptSdept值,则默认为值,则默认为其他其他Create table studentCreate table student(SnoSno char(9)primary key,char(9

16、)primary key,SnameSname char(8)char(8)unique not nullunique not null,Sage Sage smallintsmallint not nullnot null,SSexSSex char(2)char(2)check(check(SsexSsex in(in(男男,女女),),SdeptSdept char(20)char(20)default(default(其他其他)演示演示演示演示18数据库原理及应用-SQL DML属性上的约束条件属性上的约束条件属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理当往表中当往表中

17、插入元组或修改属性的值插入元组或修改属性的值时,时,RDBMSRDBMS就检查属性上的约束条件是否被满足,如果不就检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行满足则操作被拒绝执行19数据库原理及应用-SQL DML元组上的约束条件元组上的约束条件元组级的限制可以元组级的限制可以设置不同属性间的取值的相互设置不同属性间的取值的相互约束条件约束条件例:对例:对studentstudent表的约束条件:表的约束条件:当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以Ms.Ms.打头。打头。Create table studentCreate table student(S

18、noSno char(9),char(9),SnameSname char(8),char(8),SsexSsex char(2),char(2),Primary Primary key(Snokey(Sno),),Check(Check(not(Ssexnot(Ssex=男男 and and SnameSname like like MS.%)MS.%)演示步骤演示步骤演示步骤演示步骤20数据库原理及应用-SQL DML元组上的约束条件元组上的约束条件元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理当往表中当往表中插入元组或修改属性的值插入元组或修改属性的值时,时,RDBMSRD

19、BMS就检查元组上的约束条件是否被满足,如果不就检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行满足则操作被拒绝执行返回返回22数据库原理及应用-SQL DML完整性约束命名子句完整性约束命名子句SQLSQL还在还在Create tableCreate table语句中提供了完整语句中提供了完整性约束命名子句性约束命名子句constraintconstraint,用来,用来对完整对完整性约束条件命名性约束条件命名。可灵活地可灵活地增加、删除增加、删除一个完整性约束条件一个完整性约束条件定义表中的完整性限制定义表中的完整性限制ConstraintConstraint primary p

20、rimary keykey短语短语|foreign keyforeign key短语短语|checkcheck短语短语|not not nullnull|uniqueunique 返回返回23数据库原理及应用-SQL DML完整性约束命名子句完整性约束命名子句例:建立学生登记表例:建立学生登记表studentstudent,要求姓名不能取,要求姓名不能取空值且唯一,年龄小于空值且唯一,年龄小于303024数据库原理及应用-SQL DML完整性约束命名子句完整性约束命名子句Create table studentCreate table student(SnoSno numeric(6),num

21、eric(6),SnameSname char(20)char(20)constraint constraint c_namec_name not null not null constraint constraint cuq_namecuq_name unique,unique,Sage Sage smallintsmallint constraint constraint c_agec_age check(Sagecheck(Sage30)30),SsexSsex char(2)char(2),constraint constraint studentkeystudentkey prima

22、ry primary key(Snokey(Sno)25数据库原理及应用-SQL DML完整性约束命名子句完整性约束命名子句修改表中的完整性约束修改表中的完整性约束使用使用alter tablealter table语句语句例:去掉例:去掉studentstudent表中对年龄的限制表中对年龄的限制 Alter tableAlter table student student drop constraintdrop constraint c_agec_age;例:修改表例:修改表studentstudent中的约束条件,要求年中的约束条件,要求年龄小于龄小于404026数据库原理及应用-SQL

23、 DML完整性约束命名子句完整性约束命名子句Alter tableAlter table student student drop constraint drop constraint c_agec_age;Alter tableAlter table student student add constraintadd constraint c_agec_age check(Sagecheck(Sage40)40)返回返回27数据库原理及应用-SQL DML触发器实现完整性约束触发器实现完整性约束用户定义在关系表上的一类由用户定义在关系表上的一类由事件驱动的事件驱动的特殊过程特殊过程。用户对表

24、的用户对表的增、删、改增、删、改操作均由服务器自操作均由服务器自动动激活相应的触发器激活相应的触发器利用触发器在利用触发器在DBMSDBMS核心层进行核心层进行集中的完整集中的完整性控制性控制。触发器类似于约束,但触发器类似于约束,但比约束灵活比约束灵活,可以,可以实施比实施比foreign keyforeign key、checkcheck约束更为复杂约束更为复杂的检查和操作,具有更精细和更强大的数的检查和操作,具有更精细和更强大的数据控制能力据控制能力28数据库原理及应用-SQL DML触发器触发器定义触发器定义触发器SQLSERVERSQLSERVER创建触发器创建触发器使用使用SQLS

25、QL语句创建语句创建查看触发器查看触发器嵌套触发器嵌套触发器激活触发器激活触发器删除触发器删除触发器返回返回29数据库原理及应用-SQL DML触发器触发器一个触发器有三个组成部分:事件、条件一个触发器有三个组成部分:事件、条件和动作。和动作。事件事件INSERTUPDATEDELETE条件条件AFTERBEFORE动作动作SQLSQL语句语句触发器的结构触发器的结构30数据库原理及应用-SQL DML定义触发器定义触发器一般格式:一般格式:CREATE TRIGGER BEFORE|AFTER ON FOR EACH ROW|STATEMENTWHEN dbo才可在表上建触发器,数量有限才可

26、在表上建触发器,数量有限触发事件触发事件insertinsert、deletedelete或或updateupdate,或组合或,或组合或UpdateUpdate后有后有ofof触发动作体是一个匿名的触发动作体是一个匿名的存储过程块存储过程块,也可以是,也可以是对已创建存储过程的调用对已创建存储过程的调用31数据库原理及应用-SQL DML定义触发器定义触发器触发器的类型:触发器的类型:据触发器执行的时间据触发器执行的时间BEFORE/AFTERBEFORE/AFTER据所触发动作的间隔尺寸据所触发动作的间隔尺寸FOR EACH FOR EACH ROW ROW:行级触发器:行级触发器FOR

27、EACHFOR EACH STATEMENT STATEMENT:语句级触发器。:语句级触发器。例:例:UPDATEUPDATE student student SET SET SdeptSdept=CS=CS若若语句级语句级则触发动作只执行一次;则触发动作只执行一次;若行级若行级,表中有,表中有10001000行记录,则触发动作执行行记录,则触发动作执行10001000次次32数据库原理及应用-SQL DML定义触发器定义触发器例:定义一个例:定义一个BEFOREBEFORE行级触发器,为行级触发器,为教师表教师表TeacherTeacher定义完整性规则定义完整性规则“教授的工资不得低于教

28、授的工资不得低于40004000元,如果低于元,如果低于40004000元,自动改为元,自动改为40004000元元”CREATE TRIGGERCREATE TRIGGER Insert_Or_Update_SalInsert_Or_Update_SalBEFOREBEFORE INSERT OR UPDATE ON Teacher INSERT OR UPDATE ON TeacherFOR EACH ROWFOR EACH ROWASAS BEGINBEGINIF(new.JobIF(new.Job=教授教授)and(new.Saland(new.Sal4000)THEN4000)THE

29、N new.Salnew.Sal:=4000;:=4000;END IF;END IF;ENDEND返回返回执行过程执行过程执行过程执行过程33数据库原理及应用-SQL DML定义触发器定义触发器例:定义例:定义AFTERAFTER行级触发器,当行级触发器,当TeacherTeacher的的工资发生变化后就自动在工资变化表工资发生变化后就自动在工资变化表Sal_logSal_log中增加一条相应记录中增加一条相应记录CREATE TABLE CREATE TABLE Sal_logSal_log(EnoEno char(4)reference char(4)reference teacher(

30、enoteacher(eno),),Sal decimal(7,2),Sal decimal(7,2),Username char(10),Username char(10),Date Date DatetimeDatetime)34数据库原理及应用-SQL DML定义触发器定义触发器CREATE TRIGGER CREATE TRIGGER Insert_SalInsert_SalAFTER INSERT ON TeacherAFTER INSERT ON TeacherFOR EACH ROWFOR EACH ROWAS BEGINAS BEGIN INSERT INTO INSERT I

31、NTO Sal_logSal_log VALUES VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENTnew.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP_TIMESTAMP););END;END;35数据库原理及应用-SQL DML定义触发器定义触发器CREATE TRIGGER CREATE TRIGGER Update_SalUpdate_SalAFTER UPDATE ON TeacherAFTER UPDATE ON TeacherFOR EACH ROWFOR EACH ROWAS BEGINAS BEGI

32、N IF IF(new.Salnew.Salold.Salold.Sal)THENTHEN INSERT INTO INSERT INTO Sal_logSal_log VALUES VALUES(new.Eno,new,Sal,CURRENT_USER,CURRENTnew.Eno,new,Sal,CURRENT_USER,CURRENT_TIMESTAMP_TIMESTAMP););END IFEND IF END END返回返回36数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器语法语法CREATE TRIGGERCREATE TRIGGER trigger_na

33、metrigger_name ON ON table|view table|view FORFOR|AFTER|INSTEAD OFAFTER|INSTEAD OF INSERT|UPDATE|DELETEINSERT|UPDATE|DELETE WITH ENCRYPTION WITH ENCRYPTION ASAS sql_statementsql_statement .n .n 37数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器AFTERAFTER INSERT|UPDATE|DELETE INSERT|UPDATE|DELETE 是指在这些语句执行完后,执行触

34、发器是指在这些语句执行完后,执行触发器不能在视图上不能在视图上定义定义 AFTER AFTER 触发器触发器 INSTEAD OFINSTEAD OF INSERT|UPDATE|DELETE INSERT|UPDATE|DELETE 在执行这些在执行这些语句前语句前执行触发器,但执行触发器,但以后不执行以后不执行这些语句这些语句在表或视图上,每个在表或视图上,每个 INSERTINSERT、UPDATEUPDATE 或或 DELETEDELETE 语句最多可以定义一个语句最多可以定义一个 INSTEAD OF INSTEAD OF 触发器触发器 38数据库原理及应用-SQL DML使用使用S

35、QLSQL创建触发器创建触发器触发器触发时触发器触发时:系统自动在内存中创建系统自动在内存中创建deleteddeleted或或insertedinserted表表表的结构同表的结构同定义触发器的表结构定义触发器的表结构只读,不允许修改只读,不允许修改;触发器执行完成后,触发器执行完成后,自动自动删除删除insertedinserted表表 临时保存了临时保存了插入或更新后插入或更新后的记录行副本的记录行副本 deleteddeleted 表表临时保存了临时保存了删除或更新前删除或更新前的记录行副本的记录行副本 39数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器修改操

36、作修改操作insertedinserted表表deleteddeleted表表INSERTINSERT新增的新增的记录记录-DELETEDELETE-被被删删除的除的记录记录UPDATEUPDATE更新后的更新后的记录记录更新前的更新前的记录记录inserted表和deleted表存放的信息40数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器例:定义触发器当例:定义触发器当TeacherTeacher的工资发生变化后就的工资发生变化后就自动在工资变化表自动在工资变化表Sal_logSal_log中增加一条相应记录中增加一条相应记录/*insert/*insert触发器触

37、发器*/Create triggerCreate trigger Insert_SalInsert_Sal on Teacher on Teacherafterafter insert insertAsAs insert intoinsert into Sal_logSal_log(Eno,Sal,Username,newDate(Eno,Sal,Username,newDate)select select Eno,Sal,current_user,getdateEno,Sal,current_user,getdate()()from insertedfrom inserted;41数据库原理

38、及应用-SQL DML使用使用SQLSQL创建触发器创建触发器/*update/*update触发器触发器*/Create triggerCreate trigger Update_SalUpdate_Sal on Teacher on Teacherafterafter Update UpdateAsAs insert into insert into Sal_log(Eno,Sal,Username,newDateSal_log(Eno,Sal,Username,newDate)select select Eno,Sal,current_user,getdateEno,Sal,curren

39、t_user,getdate()()from inserted y from inserted y where where exists(selectexists(select*from *from deleteddeleted where where deleted.enodeleted.eno=y.enoy.eno and and deleted.saldeleted.saly.saly.sal););42数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器有些视图是不可插入、删除和修改的,但是,可有些视图是不可插入、删除和修改的,但是,可以用触发器来实现这些操作以用触

40、发器来实现这些操作例:例:CREATE VIEWCREATE VIEW s_grd1(s_grd1(SnoSno,SnameSname,GradeGrade)ASAS SELECTSELECT Student.SnoStudent.Sno,SnameSname,GradeGrade FROMFROM Student Student,SCSC WHEREWHERE Student.SnoStudent.Sno=SC.SnoSC.Sno and and CnoCno=1;=1;43数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器下面的下面的sqlsql语句不允许执行语句不允

41、许执行InsertInsert intointo s_grd(Sno,Sname,Grades_grd(Sno,Sname,Grade)valuesvalues(200215128,(200215128,陈冬陈冬,90);90);可用可用instead of instead of 触发器实现该视图的插触发器实现该视图的插入入44数据库原理及应用-SQL DML使用使用SQLSQL创建触发器创建触发器/*/*更新视图的触发器实例更新视图的触发器实例*/create triggercreate trigger insert_s_grd1 on insert_s_grd1 on s_grd1s_gr

42、d1instead ofinstead of insert insertASASinsert into insert into student(sno,snamestudent(sno,sname)select select sno,snamesno,snamefrom inserted;from inserted;insert into insert into sc(sno,cno,gradesc(sno,cno,grade)select sno,1,gradeselect sno,1,gradefrom inserted;from inserted;45数据库原理及应用-SQL DML创建

43、触发器应考虑的问题创建触发器应考虑的问题创建触发器的权限默认分配给创建触发器的权限默认分配给dbodbo,且,且不不能能将该权限将该权限转给其他用户转给其他用户。只能在只能在当前数据库中当前数据库中创建触发器。创建触发器。不能在临时表或系统表上创建触发器不能在临时表或系统表上创建触发器,但,但是触发器可以引用临时表是触发器可以引用临时表(inserted/deletedinserted/deleted)在含有用在含有用DELETE DELETE 或或 UPDATE UPDATE 操作定义的操作定义的外键的表外键的表中,不能定义中,不能定义INSTEAD OFINSTEAD OF触发器触发器46

44、数据库原理及应用-SQL DML使用触发器的考虑使用触发器的考虑sqlserversqlserver中都是语句级触发器。中都是语句级触发器。触发器最大的用途是触发器最大的用途是维护数据完整性维护数据完整性只是在必要的时候使用触发器。如果使用只是在必要的时候使用触发器。如果使用约束,规则,默认约束,规则,默认就可以实现预定的数据就可以实现预定的数据完整性时,应优先考虑使用这完整性时,应优先考虑使用这3 3种措施。种措施。触发器的定义语句触发器的定义语句尽可能清晰简单尽可能清晰简单。触发器在触发器在操作发生之后操作发生之后执行,约束在执行,约束在操作操作发生之前发生之前起作用起作用47数据库原理及

45、应用-SQL DML使用触发器的考虑使用触发器的考虑触发器和激活它的语句作为触发器和激活它的语句作为单个事务处理单个事务处理,如果检查到严重错误,整个事务自动撤销。如果检查到严重错误,整个事务自动撤销。返回返回48数据库原理及应用-SQL DML查看触发器查看触发器sp_help:用于查看触发器的一般信息,如用于查看触发器的一般信息,如触发器的名称、属性、类型和创建时间。触发器的名称、属性、类型和创建时间。语法格式:语法格式:sp_helpsp_help 触发器名称触发器名称 sp_helptext:用于查看触发器的正文信息:用于查看触发器的正文信息语法格式:语法格式:sp_helptexts

46、p_helptext 触发器名称触发器名称sp_dependssp_depends:用于查看指定触发器所引用:用于查看指定触发器所引用的表或者指定的表涉及到的所有触发器。的表或者指定的表涉及到的所有触发器。语法格式:语法格式:sp_dependssp_depends 触发器名称触发器名称 sp_dependssp_depends 表名表名返回返回49数据库原理及应用-SQL DML嵌套触发器嵌套触发器一个触发器的动作可能导致执行另一触发一个触发器的动作可能导致执行另一触发器。例如,删除触发器可能将已删除记录器。例如,删除触发器可能将已删除记录的备份存到第二个表中,如果第二个表有的备份存到第二个

47、表中,如果第二个表有插入触发器,则第一个触发器的操作会触插入触发器,则第一个触发器的操作会触发这个插入触发器。这就称为触发器嵌套发这个插入触发器。这就称为触发器嵌套触发器可嵌套至触发器可嵌套至3232层。层。返回返回50数据库原理及应用-SQL DML激活触发器激活触发器触发器的执行,是由触发器的执行,是由触发事件激活触发事件激活的,并的,并由由DBMSDBMS自动执行自动执行的的一个数据表上一个数据表上可定义多个触发器可定义多个触发器,同一个,同一个表上多个触发器激活时遵循如下的执行顺表上多个触发器激活时遵循如下的执行顺序:序:1 1、执行该表上的、执行该表上的BEFOREBEFORE触发器

48、;触发器;2 2、激活触发器的、激活触发器的SQLSQL语句;语句;3 3、执行该表上的、执行该表上的AFTERAFTER触发器。触发器。51数据库原理及应用-SQL DML激活触发器激活触发器对于同一个表上的多个对于同一个表上的多个BEFORE(AFTER)BEFORE(AFTER)触触发器,遵循发器,遵循“谁先创谁先执行谁先创谁先执行”的原则,的原则,即按照触发器创建的时间先后顺序执行。即按照触发器创建的时间先后顺序执行。返回返回52数据库原理及应用-SQL DML删除触发器删除触发器语法语法 DROP TRIGGERDROP TRIGGER ONON DROP TRIGGERDROP TRIGGER (SQL ServerSQL Server语法)语法)删除触发器所在的表时,删除触发器所在的表时,SQL ServerSQL Server将会将会自动删除与该表相关的触发器。自动删除与该表相关的触发器。返回返回53数据库原理及应用-SQL DML小结小结数据库完整性数据库完整性实体完整性实体完整性参照完整性参照完整性用户定义的完整性用户定义的完整性完整性约束命名子句完整性约束命名子句定义定义修改修改触发器触发器返回返回54数据库原理及应用-SQL DML

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

当前位置:首页 > 实用文档 > 其他

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922