• 关系数据库SQL之可编程性触发器


    前言

    前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数、存储过程、事务,本文来介绍一下触发器的使用。(还是以前面的银行系统为例)

    图片来自网络

    概述

    触发器(TRIGGER)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( INSERT,DELETE, UPDATE)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

    触发器分为两种:AFTER触发器和INSTEAD OF触发器。

    语法

    • 创建触发器
    CREATE TRIGGER <触发器名称> 
       ON  <表名|视图名> 
       [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
    AS 
    --SQL语句块
    
    • 修改触发器
    ALERT TRIGGER <触发器名称> 
       ON  <表名|视图名> 
       [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
    AS 
    --SQL语句块
    
    • 删除触发器
    DROP TRIGGER <触发器名称>
    

    说明:

    1. AFTER触发器主要用于在数据表执行INSERT,DELETE, UPDATE操作之后,同时操作其他表。
    2. INSTEAD OF触发器会替代所要执行的SQL语句,也就是说所要执行SQL并不会真正执行,真正执行的是触发器中定义的操作。
    3. AFTER触发器只针对表操作,INSTEAD OF触发器除了操作表还可以作用于视图,扩展视图可以支持的更新操作。
    4. AFTER触发器是在执行SQL之后触发,而INSTEAD OF触发器是在执行SQL之前触发。
    5. 一个表的INSERT,DELETE, UPDATE操作可以有多个AFTER触发器,有至多一个INSTEAD OF触发器

    特殊表

    触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)

    示例

    1.AFTER触发器示例
    在取钱时,交易信息表里面插入交易信息,同时要更改账户表里面的余额

    --创建触发器
    CREATE TRIGGER Trigger_getMoney 
       ON  TransInfo 
       AFTER INSERT
    AS 
    declare @cardId varchar(19)
    declare @tranMoney money
    select @cardId  = CardID , @tranMoney = TransMoney from instered;
    update CardInfo set LeftMoney = LeftMoney - @tranMoney where CardID = @cardId
    GO
    
    --执行插入操作
    insert into TransInfo values('1324 3626 7532 1935','取款',500,default);
    

    2.INSTEAD OF触发器
    指定的账户"422322001550135015"不可以删除

    --创建触发器
    CREATE TRIGGER Trigger_deleteAccount 
       ON  AccountInfo 
       INSTEAD OF DELETE
    AS 
    delete from AccountInfo where CardID != '422322001550135015' AND CardID=(select CardID from deleted)
    --执行删除操作
    

    本文就介绍到这里。
    如有疑问请联系我。

    原文来自:简书

  • 相关阅读:
    python常用模块(3)
    python中的re模块
    python中的常用模块
    python中的模块及路径
    python中的文件操作(2)
    【weixin】微信支付简介
    【其他】博客园样式修改
    【weixin】微信企业号和公众号区别和关系是什么?
    【其他】./ 和../ 以及/区别
    【sdudy】ASCII,Unicode和UTF-8终于找到一个能完全搞清楚的文章了
  • 原文地址:https://www.cnblogs.com/seayxu/p/5500066.html
Copyright © 2020-2023  润新知