• 数据库事务


    什么是数据库事务
             数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
    意思就是一连串的数据库操作,即一串增删查改的集合。

    数据库事务做了什么
            它把数据库从一个一致的状态转换到另一个一致的状态,比如数据库操作前是一个点,数据库操作后是一个点,
    我们只管这两个点的状态,而两点之间的连线上的状态我们不管因为他们可能对我们想要的结果产生影响。
     
    代码
    BEGIN TRANSACTION        -- 开始事务
    UPDATE TRegister SET Balance = Balance + 199 WHERE Id = 1
    UPDATE TRegister SET Balance = Balance - 199 WHERE Id = 6       -- 因违法CHECK(Balance>0)约束而报错
    COMMIT TRANSACTION     -- 提交事务
    然而,SQL SERVER 在失败时并不是都可以自动回滚事务(默认约束和锁超时会让事务一直打开)。所以,我们需要:
    SET XACT_ABORT ON | OFF  -- 设置只要有错误(无论级别)就回滚事务

    在实际开发中,我们通常采用TRY...CATCH的方式来处理:

    BEGIN TRANSACTION
    BEGIN TRY
        UPDATE TRegister SET Balance = Balance + 150 WHERE Id = 1
        UPDATE TRegister SET Balance = Balance - 150 WHERE Id = 6
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT>0
            ROLLBACK;
        THROW;
    END CATCH

    TRY...CATCH(异常捕获):

    • 如果没有任何异常(错误),执行完 TRY块(BEGIN...END)之间的内容
    • 否则,直接从错误行跳到 CATCH 块

    显式事务

    声明了 BEGIN TRANSACTION 的事务就是显式事务。事务从 BEGIN TRANSACTION 开始,至 COMMIT 或 ROLLBACK 结束。

    • 提交(COMMIT):执行所有从BEGIN TRANSACTION 开始的操作,结束事务
    • 回滚(ROLLBACK):撤销所有从BEGIN TRANSACTION 开始的操作,恢复原样


    隐式事务

    SET IMPLICIT_TRANSACTIONS ON | OFF   -- SQL SERVER 默认是OFF的

    不需要声明:BEGIN TRANSACTION。从第一行开始(或者上一个COMMIT或ROLLBACK)就是事务起点,直到COMMIT或ROLLBACK才结束。


    自动提交

    未声明 BEGIN TRANSACTION 的单个SQL语句,自动的受事务控制。

    比如:UPDATE...SET column_1 = x, column_2 = y,不可能只更改了column_1,没更改column_2

    事务特性:ACID

    原子性(Atomicity):不可再分。

    一致性(Consistency):要完成都完成,要不完成都不完成。

    隔离性(Isolation):正在执行的事务不能被其他事务干扰。

    持久性(Durablity):一旦完成,改变就是永久性的。

    文章转载自:快速开发平台– 云微平台
    地址:https://www.hocode.com/

  • 相关阅读:
    Linux常用操作命令大全
    判断系统,是否是移动端
    一款兼容小程序和web端的框架 Kbone-API
    defer 和 async的区别
    快应用多次弹出添加到桌面的bug
    js判断一个元素是否在数组中
    css 画太极
    css3锯齿
    js 获取屏幕宽度
    js 判断div距离浏览器顶部或者底部的距离
  • 原文地址:https://www.cnblogs.com/frfwef/p/12769145.html
Copyright © 2020-2023  润新知