- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章触发器剖析
第11章 触发器;11.1.2 触发器的种类; 基本的触发器事件;11.2 DML触发器;确定触发时间,有触发动作发生在DML语句执行之前和语句执行之后两个情况,所以,DML触发器又分为以下两个类型:;11.2.2 创建DML触发器;展开“数据库”|“school”|“表”|“student”|“触发器”节点,单击鼠标右键,在出现的快捷菜单中选择“新建触发器”命令。;出现一个新建触发器编辑窗口,其中包含触发器模板,用户可以参照模板在其中输入触发器的T-SQL语句,这里输入的语句如下(其中红字部分为主要输入的T-SQL语句):;单击工具栏中的 按钮,将该触发器保存到相关的系统表中。这样就创建了触发器trigop。; 在触发器trigop创建完毕,当对student表进行记录插入、修改或删除操作时,触发器trigop都会被自动执行。例如,执行以下程序:;2. 使用T-SQL语句创建DML触发器; 【例11.2】在数据库test中建立一个表table20,创建一个触发器trigtest,在table20表中插入、修改和删除记录时,自动显示表中的所有记录。并用相关数据进行测试。;在执行下面的语句时:;在执行下面的语句时:;3. 创建DML触发器的注意事项;11.2.3 触发器的删除、禁用和启用; 【例11.3】给出删除school数据库中student表上trigop触发器的程序。;2. 禁用DML触发器; 【例11.4】给出禁用test数据库中table20表上trigtest触发器的程序。;3. 启用DML触发器; 【例11.5】给出启用test数据库中table20表上trigtest触发器的程序。;11.2.4 inserted表和deleted表; 在对具有触发器的表(简称为触发器表)进行操作时,其操作过程如下:; 【例11.6】 编写一个程序说明inserted表和deleted表的作用。;如果此时执行下面的INSERT语句:;如果此时接着执行下面的UPDATE语句:;如果此时接着执行下面的DELETE语句:; 该例结果看到,table20是触发器表:
在插入记录时,插入的记录被插入到inserted表中;
在修改记录时,修改前的记录插入到deleted表中,修改后的记录插入到inserted表中;
在删除记录时,删除后的记录被插入到deleted表中。;11.2.5 INSERT、UPDATE和DELETE触发器的应用; 【例11.7】建立一个触发器trigname,当向student表中插入数据时,如果出现姓名重复的情况,则回滚该事务。;执行以下程序:; 【例11.8】 建立一个触发器trigsex,当向student表中插入数据时,如果出现性别不正确的情况,不回滚该事务,只提示错误消息。;当执行以下程序:;2. 应用UPDATE触发器; 【例11.9】 建立一个更新触发器trigno,该触发器防止用户修改表student的学号。;当执行以下程序:; 【例11.10】建立一个触发器trigcopy,将student表中所有被修改的数据保存到stbak表中作为历史记录。;GO
CREATE TRIGGER trigcopy --创建触发器trigcopy
ON student AFTER UPDATE
AS
--将当前日期和修改后的记录插入到stbak表中
INSERT INTO stbak(rq,sno,sname,ssex,sbirthday,sclass)
SELECT getdate(),inserted.学号,inserted.姓名,
inserted.性别,inserted.出生日期,inserted.班号
FROM student,inserted
WHERE student.学号=inserted.学号
GO;执行以下程序:;3. 应用DELETE触发器; 【例11.11】建立一个删除触发器trigclass,该触发器防止用户删除表student中所有1001班的学生记录。;执行以下程序:; 【例11.12】建立一个触发器trigcopy1,将student表中所有被删除记录的学号保存到stbak表中作为历史记录。;CREATE TRIGGER trigcopy1 --创建触发器trigcopy1
ON student AFTER DELETE
AS
BEGIN
--将当前日期和被删除的记录插入到stbak表中
INSERT INTO stbak(rq,sno,sname,ssex,sbirthday,sclass)
SELECT
原创力文档


文档评论(0)