【sql server】SQL触发器

来源:互联网 发布:永清环保怎么样知乎 编辑:程序博客网 时间:2024/05/23 19:15
【是什么】
        触发器(Trigger),是SQL Sever提供给程序员和数据分析员来保证数据完整性的一种方法,简单来说就是,触发器是一段由对数据库的更改事件引发的自动执行的代码,也是一种比Check约束更为复杂的高级约束。(有兴趣可以了解一下Check约束)
【作用】
        ①触发器是一种特殊的存储过程
        ②也具备事务的功能
        ③能在多表之间执行特殊的业务规则
【分类】
(一)从引发执行的事件来分
1、DML触发器
       DML触发器是由对表进行插入、删除、更改语句引发执行的代码。主要用于实现数据完整性约束和业务规则。
2、DDL触发器
       DML触发器是由数据库对象操作语句引发执行的代码,主要用于维护服务器和数据库级对象的安全性
(二)从触发器执行特点来分
1、前触发器(见实例二--牛腩)
        前触发性触发器,使用instead of选项定义的触发器为前触发器。这种模式的触发器是只执行触发器语句,而并不真正执行引发触发器执行的操作语句。
2、后触发器(见实例一--机房充值)
        后触发型触发器,使用for或after选项定义的触发器为后触发器,即只有在先执行引发触发器操作的语句,并且所有的约束检查也成功完成后,才执行触发器。
【表】
操作Inserted表Deleted表Insert存放新增的记录
Delete
存放被删除的记录
Update存放更新后的记录存放更新前的记录的记录
【应用实例】
1、实例一-----机房充值
-- ================================================SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:        郑艳霞-- Create date: 2015年7月16日15:35:50-- Description:    充值操作触发器-- =============================================CREATE TRIGGER trigRecharge     --触发器名称:trigRecharge   ON  RechargeLog                    --由RechargeLog表的操作引起   AFTER  INSERT                        --当上表执行INSERT操作时激活该触发器AS declare                      --声明变量     @CID varchar(50),     @Money numeric(18,2)     select @CID=CID from inserted      --声明@CID的值来源于刚才插入的数据     select @Money=Money from inserted BEGIN    Update CardInfo set Money=@Money where CID=@CID    --将充值后的金额更新至卡表中ENDGO
2、实例二-----牛腩:
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:    郑艳霞-- Create date: 2015年8月10日18:53:22-- Description:删除类别触发器-- =============================================CREATE TRIGGER trigCategoryDelete    ON  Category   instead of DELETEAS BEGIN        declare @caId int    select @caId=id from deleted    --删除评论    delete comment where newsId in (select newsId from news where caId=@caId)    --删除新闻    delete news where caId=@caId     --删除类别    delete category where id=@caIdENDGO
【小结】
        触发器中还可以加入事务,还可以对某个列的取值范围做限制,还可以提示信息等,有兴趣可以多多尝试。但是触发器还是要合理使用。首先是触发器容易被忽略,给后期维护带来一定的困难;再一个是,触发器必须要在业务和技术上有很高的要求才能不影响业务和性能。现在用的还很少还不成熟,以后多多积累,亲自探究触发器的使用好坏。
0 0
原创粉丝点击