数据库笔记12:创建与管理触发器
【摘要】
/***************************
第十二单元 创建与管理触发器
****************************/
/*
知识点学习:参看教材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)