• SQLServer事务


    指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行
    这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行

    语法步骤:
    开始事务:BEGIN TRANSACTION --开启事务
    事务提交:COMMIT TRANSACTION --提交操作
    事务回滚:ROLLBACK TRANSACTION --取消操作

    --建表
    CREATE TABLE [Person](
    [PersonId]    NVARCHAR(100) PRIMARY KEY ,        ---主键
    [PersonName] NVARCHAR(100) NULL
    )
    /*
        如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的
        Select * From Person
    */
    Begin TransAction
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('3','Name3')
    Commit TransAction
    
    /*
        如果只有Begin TransAction和RollBack TransAction 就算没报错了,还是会回滚的
        Select * From Person
    */
    --清除数据
    Delete Person
    Begin TransAction
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('3','Name3')
    RollBack TransAction
    
    /*
        SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效
        SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,
        用户级错误一般不会回滚整个事务
        
        Select * From Person
    */
    SET XACT_ABORT ON -- 打开
    Begin TransAction
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('3','Name3')
    Commit TransAction
    SET XACT_ABORT OFF -- 关闭
    
    /*
        Try Catch 配合事务使用    
        Select * From Person
    */
    Begin Try
        Begin TransAction
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            Insert Into Person(PersonId,PersonName)Values('3','Name3')
        Commit TransAction
    End Try
    Begin Catch
        Rollback TransAction
    End Catch
    
    /*
        使用全局变量@@Error 配合事务使用    
        Select * From Person
    */
    DECLARE @tran_error int;
    SET @tran_error = 0;
        Begin TransAction
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            SET @tran_error = @tran_error + @@ERROR;
            print(@tran_error);
            Insert Into Person(PersonId,PersonName)Values('1','Name1')
            SET @tran_error = @tran_error + @@ERROR;
            print(@tran_error);
            Insert Into Person(PersonId,PersonName)Values('3','Name3')
            SET @tran_error = @tran_error + @@ERROR;
            print(@tran_error);
    IF(@tran_error > 0)
        BEGIN
            --执行出错,回滚事务
            ROLLBACK TransAction;
        END
    ELSE
        BEGIN
            --没有异常,提交事务
            COMMIT TransAction;
        END
  • 相关阅读:
    Yii2设计模式——工厂方法模式
    Yii2设计模式——静态工厂模式
    Yii2设计模式——简单工厂模式
    Yii2设计模式——注册树模式
    Yii2设计模式——单例模式
    nginx负载均衡指令least_conn的真正含义
    Yii2设计模式——Yii2中用到哪些设计模式?
    Yii2设计模式——设计模式简介
    Openresty的同步输出与流式响应
    Scope 功能的改进
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/5413530.html
Copyright © 2020-2023  润新知