大型数据库技术复习 —— 触发器

简介

  • 触发器是在对表进行插入更新删除操作时自动执行的存储过程
  • 触发器通常用于强制业务规则
  • 触发器是一种高级约束,可以定义比CHECK 约束更为复杂的约束
  • 触发器定义在特定的表上,与表相关
  • 自动触发执行,不能直接调用
  • 是一个事务(可回滚)

触发器类型

  • AFTER触发器,在执行了INSERT、UPDATE或DELETE语句操作之后执行AFTER触发器。
  • INSTEAD OF触发器,在指定的操作(INSERT、UPDATE或DELETE语句)之前被执行,它的功能是不执行指定的操作,而是执行INSTEAD OF触发器中定义的操作。
  • DELETE 触发器
  • INSERT 触发器
  • UPDATE 触发器

insertd表 和 deleted表

  • 触发器触发时:系统自动在内存中创建deleted表或inserted表,只读,不允许修改;触发器执行完成后,自动删除

  • inserted 表 ,临时保存了插入或更新后的记录行

  • deleted 表,临时保存了删除或更新前的记录行
    在这里插入图片描述

创建触发器

  • 语法格式:
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
AS 
 T-SQL语句
GO
  • 例如:
-- INSERT 
CREATE TRIGGER trig_transInfo 
ON transInfo 
FOR INSERT 
 AS
 DECLARE @type char(4),@outMoney MONEY
 DECLARE @myCardID char(10),@balance MONEY
 SELECT @type=transType,@outMoney=transMoney,
       @myCardID=cardID FROM inserted
   IF (@type='支取') 
      UPDATE bank SET currentMoney=currentMoney-@outMoney
           WHERE cardID=@myCardID
  ELSE
      UPDATE bank SET currentMoney=currentMoney+@outMoney
           WHERE cardID=@myCardID
  …
GO 
-- DELETE 
CREATE TRIGGER trig_delete_transInfo
ON transInfo
FOR DELETE 
 AS
    print '开始备份数据,请稍后......'
    IF NOT EXISTS(SELECT * FROM sysobjects 
         WHERE name='backupTable')
       SELECT * INTO backupTable FROM deleted
   ELSE
       INSERT INTO backupTable SELECT * FROM deleted
    print '备份数据成功,备份表中的数据为:'
    SELECT * FROM backupTable 
GO 
-- UPDATE
CREATE TRIGGER trig_update_bank
ON bank
FOR UPDATE
 AS
    DECLARE @beforeMoney MONEY,@afterMoney MONEY  
    SELECT @beforeMoney=currentMoney FROM deleted   
    SELECT @afterMoney=currentMoney FROM inserted    
    IF ABS(@afterMoney-@beforeMoney)>20000 
      BEGIN
          print '交易金额:'+convert(varchar(8),
              ABS(@afterMoney-@beforeMoney))
          RAISERROR ('每笔交易不能超过2万元,交易失败',16,1)
          ROLLBACK TRANSACTION
       END
GO 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanleiDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值