第15章触发器.docx
- 文档编号:24720322
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:9
- 大小:17.85KB
第15章触发器.docx
《第15章触发器.docx》由会员分享,可在线阅读,更多相关《第15章触发器.docx(9页珍藏版)》请在冰豆网上搜索。
第15章触发器
第15章触发器
教学目标
理觡DmL触发器䒌DDL触珑器米型的特点和作用
理解和掌揩DML触发器的管理技术
琇解和掌握TD触发器管理技术
教学难点和重点
理解DML触发器和DDL详发器类型的特点和作用,这是学习触发ᙨ技枯犄基础。
理解和掌握фML触发器的管理技术,軙是最常䭿用的触发器技术。
理解劌掌捡D䁄L触发器管璆技术,这是实现枉攈管理数据库操作的重要技术。
摙学过程
概述
管理DML跦发器
管理DDL触发噠
上机实麌
禂述
案例:
如朜我把一盆水浇到一个彦生头上,他会有什么反应?
一般认为,触Ꮡ周是一种特殊类型的存储过程,它包含了大量的Transact-SQL语句。
但是触发器又与存储过程不同,例如,存储过程可以由用户直接调用执行,但是触发器不能被直接调用执行,它只能自动执行。
按照触发事件的不同,可以把MicrosoftSQLServer2005系统提供的触发器分成两大类型,即DML触发器和DDL触发器。
DDL:
createalterdrop
DML:
insertupdatedelete
触发器的功能
(1)强化约束(Enforcerestriction)
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的更新和变化。
(2)级联运行(CascadedOperation)
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。
例如,某个表上的触发器包含对另外一个表的数据操作(如删除、更新、插入),而该操作又导致该表上的触发器被触发。
(3)存储过程的调用(StoredProcedureInvocation)为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS之外进行操作。
15.2管理DML触发器
DML触发器的类型
按照触发器事件类型的不同,可以把MicrosoftSQLServer2005系统提供的DML触发器分成3种类型,即INSERT类型、UPDATE类型和DELETE类型。
这也是DML触发器的基本类型。
按照触发器和触发事件的操作时间划分,可以把DML触发器分为ALTER触发器和INSTEADOF触发器。
创建DML触发器
DML触发器是一种特殊类型的存储过程,所以DML触发器的创建和存储过程的创建方式有很多相似之处。
可以使用CREATETRIGGER语句创建DML触发器。
在CREATETRIGGER语句中,指定了定义触发器的基表或基视图、触发事件的类型和触发的时间、触发器的所有指令等内容。
DML触发器的工作原理
当向表中插入数据时,INSERT触发器触发执行。
当INSERT触发器触发时,新的记录增加到触发器表中和inserted表中。
该inserted表是一个逻辑表,保存了所插入记录的拷贝,允许用户参考INSERT语句中的数据。
触发器可以检查inserted表,来确定该触发器的操作是否应该执行和如何执行。
在inserted表中的那些记录,是触发器表中一行或多行记录的冗余。
inserteddeletedinsert插入新数据的备份delete删除老数据的备份update修改后的备份修改前的备份
一个DML触发器示例
为了更加完整地掌握开发触发器的步骤和技术,本节通过一个具体示例,全面讲述使用Transact-SQL语言开发和创建触发器的技术。
一般地,开发触发器的过程包括用户需求分析、确定触发器的逻辑结构、编写触发器代码和测试触发器。
语法:
createtrigger触发器名称
on表名|视图
[withenctrytpin]
for|after|insteadofinsert|update|delete
as
ifupdate(列名)orupdate(列名)
sql语句
【例】插入一个学生信息,同时更新此班级的班级人数
createtriggerclsnum
onstudent
afterinsert
as
declare@clsnochar(10)
select@clsno=clsno
frominserted
updateclass
setnumbers=numbers+1
whereclsno=@clsno
【例】当tcc表䲭䏒入一行旰据时,将枬班学生的选课忡息插入到sɣore表渭
*
create(triggeŲtri
ontcc
afterinset
as
$eclaŲe@achar(10),@bchar(10)
begin
seleɣuĠ@a=cLࡳ~o,pb=cn䁯
Ġfrïmhnsert٥d
耠rint@聡
priŮt耠@-insertၩၮto!
scope(sno,cno耩
selectsno,@b
froѭstudent
ŷhѥreclsno=聀a
end
【例】提高教师工资,新工资要比原工资要高,否则给出错误提示。
?
altertable⁴e!
cher
addsalarymoney
Ѝselegt*Ŧromteacheb
⁵pda|etešcher
sutqaary=耱000
šltertrigࡧaupda4e_sal
onteachub
ifterupdate
as
declare䁀oldmonåy,@newmoney
select@old=salarybromdeletedࠍselect@new=salaryfrominserted
print@old
print@new
if@new<@old
begin
print'数据有误'
rollback
end
updateteacher
setsalary=200
wheretno='wd001'
【例】如果用户要修改教师的授课日期,禁止此操作,并进行提示。
createtriggerupd_date
ontcc
insteadofupdate
as
ifupdate(date)
print'数据不能修改'
测试:
updatetcc
setdate=getdate()
whereid=2
select*fromtcc
【例】级联操作。
删除学生信息,同时删除学生的选课信息。
15.3管理DDL触发器
DDL触发器与DML触发器有许多类似的地方,例如可以自动触发完成相应的操作、都可以使用CREATETRIGGER语句创建等,但是也有一些不同的地方。
例如,DDL触发器的触发事件主要是CREATE、ALTER、DROP以及GRANT、DENY、REVOKE等语句,并且触发的时间条件只有AFTER,没有INSTEADOF。
【例】在数据库中创建触发器,防止视图的删除
createtriggernot_del_view
ondatabase
fordrop_view
as
print'不能删除数据库中的视图'
rollback
dropviewv_t
【例】创建触发器,防止删除此服务器中的数据库。
altertriggernot_delete_databae
onallserver
fordrop_database
withenctryption
as
print'不能删除数据库'
rollback
dropdatabasepubs
修改触发器
createtriggerclsnum
onstudent
afterinsert
as
declare@clsnochar(10)
select@clsno=clsno
frominserted
updateclass
setnumbers=numbers+1
whereclsno=@clsno
查看触发器
Sp_helptrigger‘表名’
--查看student上的所有触发器
sp_helptriggerstudent
--查看student表上所有update触发器
sp_helptriggerstudent,'update'禁用触发器
sp_helptext触发器名
--查看触发器定义
sp_helptext'del_stu_cas'
禁用触发器
altertable触发器表名
enable|disabletriggerall|触发器名
--禁用某个触发器
altertablestudent
disabletriggerdel_stu_cas
--禁用所有触发器
altertablestudent
disabletriggerall
--启动某个触发器
altertablestudent
enabletriggerdel_stu_cas
--启用所有触发器
altertablestudent
enabletriggerall
删除触发器
Droptrigger触发器名
Droptriggernot_delete_database
15.4上机实验
练习创建DML触发器
练习创建DDL触发器
针对ATM数据库,完成如下操作
如果用户要修改transact的tdate(交易日期),通过替代触发器进行提示不能修改。
某用户销户(删除帐户信息),编写触发器,同时删除此帐户的交易信息。
用户如要删除交易表信息(transact),为安全起见,进行备份。
将删除信息备份到一个新表beifen中。
(提示:
删除transact行时,判断表beifen是否存在,如果不存在进行创建后在插入;如果存在将删除的数据插入表beifen中。
判断表是否存在的代码:
ifexists(select*
fromsys.objects
wherename='表名'andtype='U')
针对bookdb数据库,完成如下操作:
如果修改ctime的值,自动更新reputation的值。
Ctime值的范围和reputation的关系见bookdb测试题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第15章 触发器 15