• 数据库事务


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

    数据库事务做了什么
            它把数据库从一个一致的状态转换到另一个一致的状态,比如数据库操作前是一个点,数据库操作后是一个点,
    我们只管这两个点的状态,而两点之间的连线上的状态我们不管因为他们可能对我们想要的结果产生影响。
     
    代码
    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/

  • 相关阅读:
    linux2.6.24.3下移植SD/MMC到S3C2440上的全历程
    设置装备布置了下双表示器
    Virtual Box 1.5.0 - 实用的“无缝窗口”
    oracle DB LINK 运用
    Linux下的tidy安置
    Linux效劳器装机安全疾速进阶指南(2)
    Linux下历程间通信
    Firefox 3 CSS Hack
    Linux下的搜刮东西find根基用法
    Linux效能器装机平安快速进阶指南(3)
  • 原文地址:https://www.cnblogs.com/frfwef/p/12769145.html
Copyright © 2020-2023  润新知