• 触发器、事务


    触发器:

            触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。

            当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器。登录触发器将为响应 LOGON 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。      

             当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。

            主要讲述DML触发器,DML触发器有两种:AFTER(FOR),INSTEAD OF触发器,同时DML 触发器使用 deleted 和 inserted 逻辑(概念)表。 它们在结构上类似于定义了触发器的表,即对其尝试执行了用户操作的表。 在 deleted 和 inserted 表保存了可能会被用户更改的行的旧值或新值。

    对于INSERT 操作,inserted保留新增的记录,deleted无记录

    对于DELETE 操作,inserted无记录,deleted保留被删除的记录

    对于UPDATE操作,inserted保留修改后的记录,deleted保留修改前的记录

    示例一:DELETE触发器的创建和执行,用的Instead Of

    示例二:执行删除一条数据,用deleted来表示被删除的那条数据,从中获取

     

    示例三:insert添加一条数据,inserted表示新添加的数据,从中获取教师编号,并且根据教师编号来查看是男是女,调换男女。

    示例四:在忘记触发器的名字时,可以通过下面的语句来进行禁用或启用触发器。

    数据库事务:

    数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作。

    事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

    设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:

          更新客户所购商品的库存信息

    保存客户付款信息--可能包括与银行系统的交互

    生成订单并且保存到数据库中   · 更新用户相关信息,例如购物数量等等 ��正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。

    数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。

    begin tran (或transaction)  --开始事务

    commit                               --提交事务

    rollback                               --回滚事务

    事务特性:

    A原子性(atomicity)

    C一致性(consistency)

    I隔离性(isolation)

    D持久性(durability)

    @@ERROR 是判断事务有没有错的条件,无错时值为0,有错时值不为0。

     

    事务创建以及使用示例:

     

  • 相关阅读:
    扩展一些std::string未提供的常用方法
    Qt子线程中显示窗口部件的一个方法
    Qt子线程中通过QMetaObject::invokeMethod刷新UI控件
    “我的一剂良药”之开源指北
    源码解析之 Mybatis 对 Integer 参数做了什么手脚?
    必知必会面试题之 Spring 基础
    从一部电影史上的趣事了解 Spring 中的循环依赖问题
    Mysql、Oracle、SQL-Server 查询字段值长度
    Cross-Origin Read Blocking (CORB) blocked cross-origin response 问题
    MacOS11.0-brew 卡在Updating Homebrew
  • 原文地址:https://www.cnblogs.com/1030351096zzz/p/6090976.html
Copyright © 2020-2023  润新知