数据库笔记12:创建与管理触发器

举报
howard2005 发表于 2021/12/30 02:21:34 2021/12/30
【摘要】 /***************************  第十二单元 创建与管理触发器 ****************************/ /*  知识点学习:参看教材P226~227  1、触发器的概念:特殊的存储过程,通过事件触发而被执行 &nb...
/***************************
 第十二单元 创建与管理触发器
****************************/

/*
 知识点学习:参看教材P226~227
 1、触发器的概念:特殊的存储过程,通过事件触发而被执行
    对表的三种操作:插入、删除、修改
 2、触发器的作用:保证数据的完整性
*/

/*
  任务一、创建触发器
  
  语法格式:
  CREATE TRIGGER 触发器名
  ON 数据表名
  [WITH ENCRYPTION]
  {FOR | AFTER | INSTEAD OF} {[INSERT][,][DELETE][,][UPDATE]} 
  AS
    [触发条件]
    T-SQL语句  
*/

--1. 针对Student表,创建一个触发器Update_Student_Trigger,只要修改Student表数据,都会在客户端显示“Student表数据已修改。”

CREATE   TRIGGER   Update_Student_Trigger
ON   Student   --触发器所针对的表
FOR   UPDATE   --设置触发事件
AS
   PRINT   'Student表数据已修改。'   

--验证1:将Student表第一条记录的学生姓名由“林斌”改为“林晓斌”。

UPDATE   Student  
SET   StuName = '林晓斌'
WHERE   StuName = '林斌' ;

--结论:触发了触发器Update_Student_Trigger,在客户端显示了“Student表数据已修改。”

--验证2:往Student表插入一条记录:00000061, 20000001, 李晓文, ASD12345

INSERT   INTO   Student   VALUES   ( '00000061' , '20000001' , '李晓文' , 'ASD12345' );

--结论:没有触发触发器Update_Student_Trigger,在客户端没有显示“Student表数据已修改。”

--验证3:修改Student表中StuNo为99999999的学生姓名,改为“萌萌哒”。

UPDATE   Student
SET   StuName = '萌萌哒'
WHERE   StuNo = '99999999' ;

--结论:明明数据是没有修改的,但是触发器却说已修改,这说明触发器有漏洞,需要我们修改。

/*
 任务二、修改触发器
 
 知识点:SQL Server为每一个触发器创建了两个专用表:inserted, deleted
         执行INSERT操作,所有插入的记录行都会保存在inserted表里;
         执行DELETE操作,所有删除的记录行都会保存在deleted表里;
         执行UPDATE操作,相当于先执行DELETE操作,然后再执行INSERT操作。
*/

--1. 修改针对Student表的触发器Update_Student_Trigger,如果数据修改成功,
--   那么在客户端显示“Student表数据已修改。”,否则显示“修改数据不成功!”

ALTER   TRIGGER   Update_Student_Trigger
ON   Student
FOR   UPDATE
AS
   IF (( SELECT   COUNT (*)   FROM   inserted )> 0 )
     PRINT   'Student表数据已修改。'
   ELSE
     PRINT   '修改数据不成功!'

--验证1:将学号为00000001的学生姓名改为“林斌”,看一看客户端提示信息。

UPDATE   Student
SET   StuName = '林斌'
WHERE   StuNo = '00000001' ;

--结论:系统显示(1行受影响),触发器显示信息:“Student表数据已修改。”,两者信息是一致的。

--验证2:修改Student表中StuNo为99999999的学生姓名,改为“萌萌哒”。

UPDATE   Student
SET   StuName = '萌萌哒'
WHERE   StuNo = '99999999' ;

--结论:系统显示(0行受影响),触发器显示信息:“修改数据不成功!”,两者信息也是一致的。

/*
 任务三:重命名触发器
*/

--1. 将触发器Update_Student_Trigger改名为Trigger_Update_Student

sp_rename   'Update_Student_Trigger' ,   'Trigger_Update_Student'

/*
 任务四:禁用触发器
*/

--1. 禁用Student表的触发器Trigger_Update_Student

ALTER   TABLE   Student   DISABLE   TRIGGER   Trigger_Update_Student

--验证:将学号为00000002的学生选课密码改为“LOVE1234”。

UPDATE   Student
SET   Pwd = 'LOVE1234'
WHERE   StuNo = '00000002' ;

--结论:只显示系统信息,没有显示触发器信息。

/*
 任务五:启用触发器
*/

--1. 启用Student表的触发器Trigger_Update_Student

ALTER   TABLE   Student   ENABLE   TRIGGER   Trigger_Update_Student

--验证:将学号为00000002的学生选课密码改为“HATE1234”。

UPDATE   Student
SET   Pwd = 'HATE1234'
WHERE   StuNo = '00000002' ;

--结论:不仅显示系统信息,而且显示触发器信息。

/*
 任务六:查询触发器的信息
*/

--1. 查询Xk数据库里所有的触发器

SELECT   *   FROM   sysobjects   WHERE   TYPE = 'TR' ;

/*
 任务七:删除触发器
*/

--1. 删除触发器Trigger_Update_Student

DROP   TRIGGER   Trigger_Update_Student

--验证:看一看触发器是否存在?

SELECT   *   FROM   sysobjects   WHERE   TYPE = 'TR' ;



文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/79451315

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。