SQL 事务(Transaction)「建议收藏」

SQL 事务(Transaction)「建议收藏」1、概念指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行语法步骤:开始事

大家好,又见面了,我是你们的朋友全栈君。

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154838.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号