第11章触发器 11.1触发器及其作用 11.2管理触发器
第11章 触发器 11.1 触发器及其作用 11.2 管理触发器
11.1触发器及其作用 触发器:是一种特殊类型的存储过程,是通 过事件进行触发而被执行的,而存储过 程通过存储过程名被直接调用。触发器 是一个功能强大的工具,它使每个站点 可以在有数据修改时自动强制执行其业 务规则。触发器可以用于 SQL Server 约束、默认值和规则的完整性检査
11.1 触发器及其作用 一、触发器:是一种特殊类型的存储过程,是通 过事件进行触发而被执行的,而存储过 程通过存储过程名被直接调用。触发器 是一个功能强大的工具,它使每个站点 可以在有数据修改时自动强制执行其业 务规则。触发器可以用于SQL Server 约束、默认值和规则的完整性检查
触发器主要优点 触发器是自动的:当对表中的数据作了任何修改 (比如手工输入或者应用程序采取的操作)之后立 即被激活。 令触发器可以通过数据库中的相关表进行层叠更改。 ☆触发器可以强制限制,这些限制比用 CHECK约束 所定义的更复杂
二、触发器主要优点 ❖触发器是自动的:当对表中的数据作了任何修改 (比如手工输入或者应用程序采取的操作)之后立 即被激活。 ❖触发器可以通过数据库中的相关表进行层叠更改。 ❖触发器可以强制限制,这些限制比用 CHECK 约束 所定义的更复杂
INSERTED表和 ELETED表 ■是 SQL Server为每个触发器都创建了两个专 用表,是两个逻辑表,不能修改,结构与被触 发器作用的表的结构相同,触发器执行完毕这 两个表将被删除。 ■ INSERTED表中存放要向表中插入的所有行 ■ DELETED表中存放要从表中删除的所有行
三、INSERTED表和DELETED表 是SQL Server为每个触发器都创建了两个专 用表,是两个逻辑表,不能修改,结构与被触 发器作用的表的结构相同,触发器执行完毕这 两个表将被删除。 INSERTED表中存放要向表中插入的所有行 DELETED表中存放要从表中删除的所有行
11.2管理触发器 创建触发器 1、当创建一个触发器时必须指定: (1)名称; (2)在其上定义触发器的表 (3)触发器将何时激发; (4)激活触发器的数据修改语句
11.2 管理触发器 一、创建触发器 1、当创建一个触发器时必须指定: ⑴名称; ⑵在其上定义触发器的表; ⑶触发器将何时激发; ⑷激活触发器的数据修改语句
2、使用企业管理器创建触发器 在企业管理器中,展开指定的服务器和数 据库项,然后展开要在其上创建触发器的表所 在的数据库,用右键单击该表,从弹出的快捷 菜单中选择所有任务子菜单下的管理触发器选 项,则会出现触发器属性对话框。在该对话框 中,在名称文本框中选择新建,然后在文本框 中输入触发器文本。单击“检查语法”按钮, 则可以检查语法是否正确。单击“应用”按钮, 则在名称下拉列表中会有新创建的触发器名称 最后,单击“确定”按钮,即可关闭该对话框, 成功创建触发器
2、 使用企业管理器创建触发器 在企业管理器中,展开指定的服务器和数 据库项,然后展开要在其上创建触发器的表所 在的数据库,用右键单击该表,从弹出的快捷 菜单中选择所有任务子菜单下的管理触发器选 项,则会出现触发器属性对话框。在该对话框 中,在名称文本框中选择新建,然后在文本框 中输入触发器文本。单击“检查语法”按钮, 则可以检查语法是否正确。单击“应用”按钮, 则在名称下拉列表中会有新创建的触发器名称。 最后,单击“确定”按钮,即可关闭该对话框, 成功创建触发器
3、使用命令创建触发器 CREATE TRIGGER触发器名 0N表/视图名 LWITH ENCRYPTION I FOR AFTER INSTEAD OF I [DELETE]L, ]INSERT]L, [UPDATE]] L NOT FOR REPLICATIONI AS SQL语句
3、 使用命令创建触发器 CREATE TRIGGER 触发器名 ON 表/视图名 [WITH ENCRYPTION] { FOR|AFTER|INSTEAD OF } { [DELETE][,][INSERT][,][UPDATE] } [ NOT FOR REPLICATION] AS SQL 语句
例1、创建一触发器,要求每当在 Student表中修改 数据时,将向客户端显示一条“记录已修改”的 信息。 USE XK GO CREATE TRIGGER Test1 on Student FOR UPDATE AS PRINT记录已修改! 测试: UPDATE Student set Pwd=11111111 WHERE StuNo=00000001
例1、创建一触发器,要求每当在Student表中修改 数据时,将向客户端显示一条“记录已修改”的 信息。 USE Xk GO CREATE TRIGGER Test1 ON Student FOR UPDATE AS PRINT '记录已修改!' 测试:UPDATE Student SET Pwd='11111111' WHERE StuNo='00000001
例2、创建一触发器,要求当插入、更新、删除 StuCou表的选课记录时,能更新 Course表中相应 的报名人数 USE XK CREATE TRigGer SetWillNum on Stucou FOR NSERT. UPDATE. DELETE AS UPDATE Course set WillNum=WillNum+1 WHERE CouNo=(SELECT CouNo FROM INSERTED UPDATE Course set WillNum=Willnum-1 WHERE CouNo(SELECT CouNo FROM DELETED)
例2、创建一触发器,要求当插入、更新、删除 StuCou表的选课记录时,能更新Course表中相应 的报名人数 USE Xk CREATE TRIGGER SetWillNum ON StuCou FOR INSERT, UPDATE, DELETE AS UPDATE Course SET WillNum=WillNum+1 WHERE CouNo=(SELECT CouNo FROM INSERTED) UPDATE Course SET WillNum=WillNum-1 WHERE CouNo=(SELECT CouNo FROM DELETED)
■ SELECT米 fRoM Course WHERE COuNC=002 seleCt from Course WHERE CouN=003 测试 UV: UPDATE StuCou SET CouNo=002 WHERE tuNo=00000011 AND CouN=003 SELECT * FROM Course WHERE COuNo=002 ■ SELECT米 FROM Course WHERE COUNo=0032
SELECT * FROM Course WHERE CouNo='002' SELECT * FROM Course WHERE CouNo='003' 测试:UPDATE StuCou SET CouNo='002' WHERE StuNo='00000011' AND CouNo='003' SELECT * FROM Course WHERE CouNo='002' SELECT * FROM Course WHERE CouNo='003