zoukankan      html  css  js  c++  java
  • SQL 事务(Transaction)

    1、概念

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

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

    2、建表

    --建表
    CREATE TABLE [Person](
    [PersonId]    NVARCHAR(100) PRIMARY KEY ,        ---主键
    [PersonName] NVARCHAR(100) NULL
    )

    3、事务

    /*
        如果只有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
  • 相关阅读:
    软件逆向——软件壳特点总结
    OD调试4----去除nag窗口的几种方法
    OD调试3--获取使用执照
    OD调试2----破解序列号验证程序
    OD调试初步概念——修改窗口标题
    Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 11 Pointer Analysis Context Sensitivity
    Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 08 Pointer Analysis && 09 Pointer Analysis Foundations (I)
    Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 07 Interprocedural Analysis
    Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 05 Data Flow Analysis
    Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 03 Data Flow Analysis
  • 原文地址:https://www.cnblogs.com/yuan-jun/p/6505759.html
Copyright © 2011-2022 走看看