SQL Server 事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 事务相关的知识,希望对你有一定的参考价值。

 

SQL Server 事务

  

  •  定义 

    

    事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。

      他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行

 

  •  四大特性

  

  1.  原子性: 最小的控制单元,不可再分,要么都执行,要么都不执行
  2.  一致性: 事务完成时,数据必须是一致的(事务处理之前,存储中的数据是一致的,保证数据完整性)
  3.  隔离性: 对数据修改的多个事务是彼此隔离的,不会相互影响
  4.  永久性: 事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

 

  •  分类:
    •    显示事务: 最常用的事务处理方式,用 BEGIN TRANSATION 来明确事务的开始
    •    隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个 T-SQL 语句又将启动一个新事务
    •    自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚

 

  • 语法

    开始事务: BEGIN  TRAN[SACTION]

    执行事务: COMMIT TRAN[SACTION]

    回滚事务: ROLLBACK TRAN[SACTION]

    保存回滚点:SAVE TRAN[SACTION]

 

  •  判断语句出错

    @@ERROR

    @sumerror = @sumer[email protected]@ERROR

 

  • 示例

    事务处理前数据图:

 

        技术分享

 

    要求:

      刘备给张飞30元

 

    执行代码:

 

BEGIN TRAN Tran_Money    --开始事务

DECLARE @tran_error int;
SET @tran_error = 0;
    BEGIN TRY 
        UPDATE tb_Money SET MyMoney = MyMoney - 30 WHERE Name = 刘备;
        SET @tran_error = @tran_error + @@ERROR;
        --测试出错代码,看看刘备的钱减少,关羽的钱是否会增加
        --SET @tran_error = 1;
        UPDATE tb_Money SET MyMoney = MyMoney + 30 WHERE Name = 关羽;
        SET @tran_error = @tran_error + @@ERROR;
    END TRY

BEGIN CATCH
    PRINT 出现异常,错误编号: + convert(varchar,error_number()) + ,错误消息: + error_message()
    SET @tran_error = @tran_error + 1
END CATCH

IF(@tran_error > 0)
    BEGIN
        --执行出错,回滚事务
        ROLLBACK TRAN;
        PRINT 转账失败,取消交易!;
    END
ELSE
    BEGIN
        --没有异常,提交事务
        COMMIT TRAN;
        PRINT 转账成功!;
    END

 

以上是关于SQL Server 事务的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

SQL Server:如果从 .net 代码中取消,则存储过程中打开的事务的默认操作

SQL Server 事务与锁

SQL Server 2008 中的事务问题

SQL Server 的事务和锁

SQL Server中while循环中的事务