触发器是在对表进行插入、更新、删除操纵时自动执行的存储过程,常用于强制业务法则,,是一种高级约束,可以界说比用check约束更为庞大的约束。可以执行庞大的SQL语句(if/while/case)
触发器可以界说在特定的表上,与表相关
自动触发执行
不能直接挪用
是一个事务(可以回滚)
触发器的类型
(1) DELETE触发器
(2) INSERT触发器
(3) UPDATE触发器
inserted表和deleted表
触发器触发时:
系统自动在内存中创建deleted表或inserted表
Deleted表和inserted表都是只读的,不允许改削;触发器执行完成后自动删除
Inserted表
姑且生存了删除或更新前的记录行
可以从inserted表中查抄插入的数据是否满足业务需求
如果不满足,则向用户呈报错误动静,并回滚插入操纵
Deleted表
姑且生存了删除或更新前的记录行
可以从delered表中查抄被删除的数据是否满足业务需求
如果不满足,则向用户呈报错误动静,并回滚删除操纵
注意:在执行insert操纵时,先创建inserted表,将插入的语句放到inserted表中,判断插入语句是否是否切合业务需求,如果不满足就向用户生存错误动静,并回滚插入操纵,如果满足则执行告成.
执行deleted操纵时,先创建deleted表,将删除的语句放到deleted表中,判断删除的语句是否切合业务需求,如果不满足就想用户呈报错误信息,并回滚删除操纵,如果满足则执行告成
执行update操纵时,先创建inserted表和deleted表,将要改削的表中数据插手deleted表中,
然后将改削后的数据放入inserted表中,判断语句是否切合业务需求,如果不满足就向用户生存错误动静,并回滚插入操纵,如果满足则执行告成.
改削操纵
inserted表
deleted表
增加(INSERT)记录
存放新增的记录
------
删除(DELETE)记录
-----
存放被删除的记录
改削(UPDATE)记录
存放更新后的记录
存放更新前的记录
总结为表如下:
创建触发器
语法:
Create trigger 触发器名称
On 表名
[with encryption]
For[delete/insert/update]
As
T-SQL语句
GO
[with encryption]暗示加密触发器界说的SQL文本
[delete/insert/update]指定触发器的类型
9.insert触发器的使用:
--当向交易信息表(transInfo)中插入一条交易信息时,
--我们应自动更新对应帐户的余额
DELETE触发器的使用:
当删除交易信息表时,要求自动备份被删除的数据到表backupTable中 。
UPDATE触发器的使用
11.UPDATE触发器除了跟踪数据的变革(改削)外,还可以查抄是否改削了某列的数据
使用UPDATE(列)函数检测是否改削了某列
问题:
交易日期一般由系统自动孕育产生,默认为当前日期。为了安适
起见,一般禁止改削,以防舞弊。
触发器还是一个特殊的事务单元,当呈现错误时,可以执行ROLLBACK TRANSACTION回滚勾销操纵
触发器一般都需要使用姑且表:deleted表和inserted表,它们存放了被删除或插入的记录行副本