接上篇博客的内容,触发器能够看做是一个特殊的存储过程。本篇博客主要关注DML和DDL触发器对应的使用方法。
1.触发器的定义
触发器的定义以下图。它与存储过程的区别在于触发器是
被动调用的 ,即在知足特定事件的状况下被执行,而存储过程是在使用操做语句时
主动进行调用。
触发器大体分为两种:DDL触发器和DML触发器,相对应的具体定义以下。
2.建立触发器
2.1建立INSERT触发器
INSERT触发器是DML触发器的一种,其语法格式以下。
以AdventureWorks2012中的Sales.Currency表为例,新建一个INSERT触发器。新建查询中输入
create trigger T_addCurrencyNum
on Sales.Currency --在Sales.Currency表中新建触发器
for insert --规定触发器种类为INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1 --在Currency表修改后,与该表相关的CurrencyRate表中ModifiedDate值加一
便可新建一个INSERT触发器
在新建查询中输入
create trigger T_addCurrencyNum
on Sales.Currency --在Sales.Currency表中新建触发器
for insert --规定触发器种类为INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1 --在Currency表修改后,与该表相关的CurrencyRate表中ModifiedDate值加一
便可
2.2DELETE触发器
同理,在对数据表进行删除数据时,能够使用DELETE触发器,在删除数据后能够进行提示。
仍以AdventureWorks2012中的Sales.Currency表为例,新建一个DELETE触发器。新建查询中输入
create trigger T_deleteName
on Sales.Currency
for delete
as
select Name from deleted --deleted是一个临时表,用以存储删除的数据
便可新建一个DELETE触发器,以后再进行数据的删除便可进行消息提示,新建查询中输入
delete from Sales.Currency where Name='CN' --提示删除‘CN’
便可
2.3 UPDATE触发器
UPDATE能够看做是INSERT触发器与DELETE触发器的结合,在使用UPDATE时先进行DELETE,再进行INSERT
在新建查询中输入
create trigger T_updateCode
on Sales.Currency
for update
as
if(update(CurrencyCode)) --若是对表CurrencyCode进行修改
begin
print 'you can not modify the CurrencyCode!'
rollback transaction --回滚操做,即对执行失败的语句进行撤销,返回原表
end
else
print 'success!'
便可建立UPDATE触发器
此时将没法修改CurrencyCode列,在新建查询中输入
update Sales.Currency set CurrencyCode='SYJ' where Name='Kroon'
将会报错,以下图所示
3. DLL触发器
上述的DML触发器是针对具体语句的触发器,而DLL触发器则是针对
数据表级别的建立和修改设立的触发器种类,其语法格式以下。
新建查询中输入
create trigger T_modTable
on database --数据表级别
for drop_table,alter_table --不容许drop,alter
as
print 'you can not modify the database!'
rollback
便可建立一个DLL触发器,以后对AdventureWorks2012中的表进行删除时将会报错。
嵌套触发器和递归触发器在视频中未做过多讲解,以后的项目设计中如有涉及,将会进行更新!