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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql联合主键

    mysql联合主键1、hibernate配置联合主键1.1联合主键的好处:联合主键的好处是不需要因为需要主键而增加一个无用的主键列1.2联合主键的建表语句CREATETABLE`HTTP_TERMINAL_DETAIL_STATISTICS`( `TIME`CHAR(14)NOTNULLCOMMENT’时间’, `TERMINAL_TYPE`VARCHAR(128)NOTNULLCO…

    2022年6月29日
    26
  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

    2022年8月11日
    4
  • 解题神器软件下载_解题app哪个好

    解题神器软件下载_解题app哪个好BrokenAuth.&SessionMgmt.InsecureLoginFormslow???medium查看源码跟踪unlock_secret()方法,很简单的逻辑functionunlock_secret(){varbWAPP="bashupdatekilledmyshells!"vara=b…

    2022年9月15日
    4
  • Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件

    Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢器打开文件Word在试图打开文件时遇到错误,请尝试下列方法:检查文档或驱动器的文件权限确保有足够的内存和磁盘空间用文本恢器打开文件 。经常在浏览器上直接下载的文档打开就报这个错,也不知道是什么原因,最后发现就是文件的权限。解决方法:右键该文档属性:在解除锁定这里√上就ojbk了。 …

    2022年6月2日
    129
  • C语言实现推箱子游戏

    C语言实现推箱子游戏很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~一、介绍开发语言:C语言开发工具:Dev-C++5.11日期:2019年9月28日作者:ZackSock也不说太多多余的话了,先看一下效果图:游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。二、代…

    2022年5月18日
    35
  • python的缩进规则具体是什么_python语言中的缩进

    python的缩进规则具体是什么_python语言中的缩进python的缩进规则有哪些发布时间:2020-09-2315:18:50来源:亿速云阅读:70作者:Leah本篇文章给大家分享的是有关python的缩进规则有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一般的语言都是通过{}或end来作为代码块的标记,而Python则是通过缩进来识别代码块的。对于Python的这种“缩进”风…

    2022年10月13日
    4

发表回复

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

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