通俗易懂SQL server 中的触发器

一:什么是触发器?

触发器就是类似 陷阱触发机关一样,设置好陷阱,踩到陷阱触发机关。数据库触发器一样的道理,设置好一个东西,规定情况下触发生效。

官方:通过事件满足后自动实现的一种特殊存储过程

二:触发器种类?

触发器有俩种 ddl和dml     数据定义语言(data definition language)  数据操作语言(Data Manipulation Language)

dml数据操作语言 很容易理解 就是增删改数据的 时候 就是dml   可以理解为对表操作的触发器

ddl就是主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应  理解为对库操作的触发器

三:相关的语句?

因为 常用触发器就是为了增删改操作 所以相关语句 以dml 触发器为例

1:创建语句  (通俗易懂  建一个触发器 名字是啥 在哪个表  什么操作后 触发  触发要做的啥事情)

CREATE TRIGGER trigger_name
 ON table_name
 [WITH ENCRYPTION]
  FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE]
 AS 
  T-SQL语句
GO

注意:触发器名字不要带引号  [WITH ENCRYPTION]:表示将该触发器加密,加密后触发器执行方法将无法被查看 一般是不写

触发类别: after  for  和 instead of  俩种  分别在表操作之前与表操作之后进行触发

触发条件:DELETE, INSERT, UPDATE

触发结果内容:                                                                         

  插入表(insered)删除表(deleted)
插入操作(insert)插入表中存放更新后的记录    无
修改操作(update)  插入表中存放更新后的记录删除表中存放更新前的记录
删除操作(delete)删除表中存放被删除的旧纪录

 之后t-sql语句中如果要使用触发的结果内容    就需要使用   insered   deleted

 

举例:  往bus表中添加数据时触发   从添加内容中查看价格 大于100的时候 往faq表加数据 小于100数据回滚

CREATE trigger [dbo].[test1]
on  [dbo].[TourOrder_Bus]
after insert
as
  begin 
    declare @a decimal
    select @a=Price from inserted
    if(@a>100)
     begin
      insert into  faq values('asdasd','asda',1,123)
     end
     else
     begin 
            print('价格不能小于100')
            rollback transaction     --数据回滚
     end
  end 

不满足提示

满足就会触发内容 往faq表中添加一条记录

四:使用情景?

1:查看当前库中有哪些触发器

 select * from sysobjects where xtype='TR'

2:查看某个触发器内容

 exec sp_helptext 'test1'

3:多个关于触发器的情况 可看这篇文章不错

http://www.cftea.com/c/765.asp

触发器优点:
  1.强化约束:强制复杂业务的规则和要求,能实现比check语句更为复杂的约束。
  2.跟踪变化:触发器可以侦测数据库内的操作,从而禁止数据库中未经许可的更新和变化。
  3.级联运行:侦测数据库内的操作时,可自动地级联影响整个数据库的各项内容。
  4.嵌套调用:触发器可以调用一个或多个存储过程。触发器最多可以嵌套32层。

触发器缺点:
    1. 可移植性差。
  2.占用服务器资源,给服务器造成压力。
  3.执行速度主要取决于数据库服务器的性能与触发器代码的复杂程度。
  4.嵌套调用一旦出现问题,排错困难,而且数据容易造成不一致,后期维护不方便。

触发器使用建议:
        1.尽量避免在触发器中执行耗时操作,因为触发器会与SQL语句认为在同一事务中,事务不结束,就无法释放锁。
        2.避免在触发器中做复杂操作,影响触发器性能的因素比较多(Eg:产品版本,所使用的架构等),要想编写高效的触发器考虑因素比较多,编写高性能触发器还是很难的。
        3.触发器编写时注意多行触发时的处理。(一般不建议使用游标)

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值