首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL SERVER事务处理

有两个方法可将远程 SQL 服务器登记在一个分布式事务中: 分布式事务中已登记的连接执行一个远程存储过程调用,该调用引用一个远程服务器。...分布式事务中已登记的连接执行一个分布式查询,该查询引用一个远程服务器。 示例 本例在本地和远程数据库上更新作者的姓。本地和远程数据库将同时提交或同时回滚本事务。...若要取消整个事务,请使用 ROLLBACK TRANSACTION transaction_name 格式。这将撤消事务的所 有语句和过程。...嵌套事务时,该语句将所有内层事务回滚到 最远的 BEGIN TRANSACTION 语句。在这两种情况下,ROLLBACK TRANSACTION 均将 @@TRANCOUNT 系统函数减为 0。...系统仅登记第一个(最外部的)事务名。回滚 到其它任何名字(有效的保存点名除外)都会产生错误。 事实上,任何在回滚之前执行的语句都没有在错误发生时回滚。这语句仅当外层的事务回滚时才会进行回滚。

1.8K20

SQL基础【十八、事物】(sql事物慎用,还是写业务逻辑代码好一些,入伙涉及到更换数据啥的很麻烦!)

1、了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器。 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写。...>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务 rollback tran ---由于出错,这里回滚到开始,第一条语句也没有插入成功。...>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务 rollback tran end catch if(@@trancount>0) rollback...事务保存点示例: 在SQL Server中使用rollback会回滚所有的未提交事务状态,但是有些时候我们只需要回滚部分语句,把不需要回滚的语句提到事务外面来,虽然是个方法,但是却破坏了事务的ACID。...4、使用set xact_abort 设置 xact_abort on/off , 指定是否回滚当前事务,为on时如果当前sql出错,回滚整个事务,为off时如果sql出错回滚当前sql语句,其它语句照常运行读写数据库

48020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    嵌套事务回滚策略_内部事务回滚会导致外部事务回滚

    外部出错:如果外部事物出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。 注:如果内部的事务不起事务名称,内部如果出错,将会回滚掉会话中的全部事务,而且报异常。...ROLLBACK TRAN将@@TRANCOUNT减为0并回滚整个事务及其中嵌套的事务,无论它们是否已经被提交。因此,嵌套事务中所做的更新被回滚,数据没有任何改变。...要避免嵌套事务,可以在过程开始处检查@@TRANCOUNT的值,以此来确定是否需要开始一个事务。如果@@TRANCOUNT大于0,因为过程已经处于一个事务中并且调用实例可以在错误发生时回滚事务。...存储过程和触发器中回滚  如果 @@TRANCOUNT 的值在存储过程完成时与过程执行时不同,则会生成一个 266 信息类错误。该错误不是由触发器中同一个条件生成的。    ...这是因为 ROLLBACK 回滚所有未完成的事务,并将 @@TRANCOUNT 减到 0,该值比调用过程时要小。

    3K20

    sql server 事务处理

    事务有4个属性,称为ACID(原子性、一致性、隔离性和持久性) 原子性   事务必须是原子工作单元。对于其数据修改,要么全都执行,要么全都不执行。...3.隐性事务:当连接以隐性事务模式进行操作时,SQL Server将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只须提交或回滚每个事务。隐性事务模式形成连续的事务链。...例如: 1 /*启动一个事务向student表中删除一个记录,然后回滚该事务*/ 2 begin transaction 3 delete student where sno=100 4 rollback...5 6 select * from student --由于回滚该事务,因此student表中没有插入记录。...在第一个事务被提交或回滚之后,下次当连接执行这些语句的任何语句时,SQL Server都将自动启动一个新事务。

    2.4K80

    sql事务的使用及其技巧整理

    sql事务的使用及其技巧整理 概述:   在实际项目开发中,为了确保数据操作结果的一致性等要求,事务是一个必不可少的解决利器。   ...持久性:事务提交之后,数据是永久性的,不可再回滚,不受关机等事件的影响 事务分类: 根据事务的执行维度力度,事务又分为:自动提交事务、显式事务、隐式事务 自动提交事务:sqlserver的一种默认机制...提交事务、Rollback Transaction 回滚事务即可    显示事务和隐式的主要区别自在于,隐式事务在执行完毕后自动提交。...off :代表某一个语句执行错误,子回滚该条语句执行,并继续执行后续语句,同时提交执行成功的语句   ---- off 此种情况应该很少在事务中使用,毕竟使用事务的目的就是实现执行结果的一致性 set...,事务回滚时,只回滚到指定位置,指定位置之前的执行结果不在回滚   在sqlserver中可以通过事务保存点,来实现对事务的精确回滚,关键词是:save transaction   和rollback

    1K20

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

    大家好,又见面了,我是你们的朋友全栈君。...1、概念 指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行 这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行 语法步骤: 开始事务.../* 如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的 Select * From Person */ Begin TransAction...ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效 SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定, 用户级错误一般不会回滚整个事务...@@Error 配合事务使用 Select * From Person */ DECLARE @tran_error int; SET @tran_error = 0; Begin

    45010

    sql server 无法访问数据库

    在SQL Server中,我常常会看到有些前辈这样写: if(@@error0) ROLLBACK TRANSACTION T else COMMIT TRANSACTION T 一开始...,我看见别人这么写,我就想当然的以为它只是个计数器,每当检测到一处错误时,@@error的值+1,不过就因为这个理所当然,所以杯具了......,16,1) 】这里抛出了一个错误,整个事务应该回滚才对,可是,它却没有回滚!!那么原因出在哪呢?原来,问题出在"SELECT GETDATE()"这句上面!...因为执行RAISERROR语句时,@@error的值不为0(好像是5000),而当执行到下一句"SELECT GETDATE()"时,@@error的值又变为0了!...用Try...CATCH语法就可以了,语句如下: SET NOCOUNT ON; SET XACT_ABORT ON; --执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚

    1.6K50

    30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    ,SQL Server通常会自动回滚事务; 4.少数不太严重的错误不会引发事务的自动回滚,如主键冲突、锁超时等; 5.可以使用错误处理来捕获第4点提到的错误,并采取某种操作,如把错误记录在日志中,再回滚事务...; 6.SELECT @@TRANCOUNT可用在代码的任何位置来判断当前使用SELECT @@TRANCOUNT的地方是否位于一个打开的事务当中,如果不在任何打开的事务范围内,则该函数返回0;如果在某个打开的事务返回范围内...5.回滚:在撤销阶段,对于提交指令没有写入到日志中的事务,数据库引擎会撤销这些事务所做的修改。(这句话需要research,可能是不正确的。...c.排他锁和其他任何类型的锁在多事务中不能在同一阶段作用于同一个资源。     如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。...(2)写操作   a.任何对表做出修改的语句   b.使用排他锁   c.不能修改读操作获得的锁和锁的持续时间 (3)读操作:   a.任何检索数据的语句   b.默认使用共享锁   c.使用隔离级别来控制读操作的处理方式

    1.9K50

    C#三十三 事务

    如果在写入一个记录时出现了一个失败,那么在事务处理中已写入的其他数据就会回滚。事务可能由很多单个任务构成。...简单事务的一个常见例子:把钱从A账户转到B账户,这涉及两项任务,即从A账户把钱取出来;把钱存入B账户。两项任务要么同时成功,要么一起失败,给予回滚,以便保持账户的状态和原来相同。...GO 23. ​set​ xact_abort on表示遇到错误立即回滚。 当然你也可以这么写: 1. CREATE PROCEDURE tran1 2. ​...GO 数据库事务有它的优势和限制。 优势: 所有的事务逻辑包含在一个单独的调用中。 拥有运行一个事务的最佳性能。 独立于应用程序。 限制: 事务上下文仅存在于数据库调用中。...10.3.3 ADO.NET级别的事务​ 现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的C#开发者,我们已经熟知编写数据库交互程序的一些要点,即: (1)使用SqlConnection

    6410

    图解mysql事务实现原理

    事务无非是要做到可靠性以及并发处理 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态...下面我首先讲实现事务功能的三个技术,分别是日志文件(redo log 和 undo log),锁技术以及MVCC,然后再讲事务的实现原理,包括原子性是怎么实现的,隔离型是怎么实现的等等。...总结: undo log是用来回滚数据的用于保障未提交事务的原子性 二、mysql锁技术以及MVCC基础 1.mysql锁技术 当有多个请求来读取表中的数据时可以不采取任何操作,但是多个请求里有读请求,...: (1) 产生了被修改前数据(zhangsan,1000) 的回滚日志 (2) 产生了被修改前数据(zhangsan,0) 的回滚日志 根据上面流程可以得出如下结论: 1.每条数据变更(insert/...,根据undo log生成回滚语句,比如: (1) 如果在回滚日志里有新增数据记录,则生成删除该条的语句 (2) 如果在回滚日志里有删除数据记录,则生成生成该条的语句 (3) 如果在回滚日志里有修改数据记录

    54910

    8000字 | 32 张图 | 一文搞懂事务+隔离级别+阻塞+死锁

    ,SQL Server通常会自动回滚事务; 4.少数不太严重的错误不会引发事务的自动回滚,如主键冲突、锁超时等; 5.可以使用错误处理来捕获第4点提到的错误,并采取某种操作,如把错误记录在日志中,再回滚事务...; 6.SELECT @@TRANCOUNT可用在代码的任何位置来判断当前使用SELECT @@TRANCOUNT的地方是否位于一个打开的事务当中,如果不在任何打开的事务范围内,则该函数返回0;如果在某个打开的事务返回范围内...「回滚:」 在撤销阶段,对于提交指令没有写入到日志中的事务,数据库引擎会撤销这些事务所做的修改。(这句话需要research,可能是不正确的。...c.排他锁和其他任何类型的锁在多事务中不能在同一阶段作用于同一个资源。 如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。...,同时释放排他锁 四、隔离级别 4.1 基本概念 「(1)隔离级别用来做什么」 a.隔离级别用于决定如何控制并发用户读写数据的操作 「(2)写操作」 a.任何对表做出修改的语句 b.使用排他锁 c.不能修改读操作获得的锁和锁的持续时间

    38120

    宝贝,来,讲讲 Spring 事务有哪些坑?

    Spring 事务的原理 2. Spring 什么情况下进行事务回滚 3. Spring 事务什么时候失效 4. Spring 事务隔离和数据库事务隔离是不是一个概念 5....主要内容如下: Spring 事务的原理; Spring 什么情况下进行事务回滚; Spring 事务什么时候失效; Spring 事务和数据库事务隔离是不是同一个概念; Spring 事务控制放在 Service...使用 Spring 事务管理后,我们可以省略步骤 2 和步骤 4,让 AOP 帮你去做这些工作,关键类在 TransactionAspectSupport 这个切面里。...Spring 什么情况下进行事务回滚 首先我们要明白, Spring 事务回滚机制是这样的:当所拦截的方法有指定异常抛出,事务才会自动进行回滚!...Spring 事务什么时候失效 注意:这是一道经典题。4年前我毕业那会在问,我都工作4年了,现在还问这道。其出现频率,不亚于 HashMap 的出现频率!

    44820

    图文并茂讲解Mysql事务实现原理

    可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有了undo log和redo...总结: undo log是用来回滚数据的用于保障 未提交事务的原子性 三、mysql锁技术以及MVCC基础 1. mysql锁技术 当有多个请求来读取表中的数据时可以不采取任何操作,但是多个请求里有读请求...从上图可以了解到数据的变更都伴随着回滚日志的产生: (1) 产生了被修改前数据(zhangsan,1000) 的回滚日志 (2) 产生了被修改前数据(zhangsan,0) 的回滚日志 根据上面流程可以得出如下结论...回滚操作就是要还原到原来的状态,undo log记录了数据被修改前的信息以及新增和被删除的数据信息,根据undo log生成回滚语句,比如: (1) 如果在回滚日志里有新增数据记录,则生成删除该条的语句...(2) 如果在回滚日志里有删除数据记录,则生成生成该条的语句 (3) 如果在回滚日志里有修改数据记录,则生成修改到原先数据的语句 2.持久性的实现 事务一旦提交,其所作做的修改会永久保存到数据库中,此时即使系统崩溃修改的数据也不会丢失

    13.6K127

    8000字 | 32 张图 | 一文搞懂事务+隔离级别+阻塞+死锁

    ,SQL Server通常会自动回滚事务; 4.少数不太严重的错误不会引发事务的自动回滚,如主键冲突、锁超时等; 5.可以使用错误处理来捕获第4点提到的错误,并采取某种操作,如把错误记录在日志中,再回滚事务...; 6.SELECT @@TRANCOUNT可用在代码的任何位置来判断当前使用SELECT @@TRANCOUNT的地方是否位于一个打开的事务当中,如果不在任何打开的事务范围内,则该函数返回0;如果在某个打开的事务返回范围内...「回滚:」 在撤销阶段,对于提交指令没有写入到日志中的事务,数据库引擎会撤销这些事务所做的修改。(这句话需要research,可能是不正确的。...c.排他锁和其他任何类型的锁在多事务中不能在同一阶段作用于同一个资源。 如:当前事务获得了某个资源的排他锁,则其他事务不能获得该资源的任何其他类型的锁。...基本概念 「(1)隔离级别用来做什么」 a.隔离级别用于决定如何控制并发用户读写数据的操作 「(2)写操作」 a.任何对表做出修改的语句 b.使用排他锁 c.不能修改读操作获得的锁和锁的持续时间 「(

    91231

    MySQL 日志:undo log、redo log、binlog

    undo log(回滚日志)、redo log(重做日志) 、binlog (归档日志)这三种日志: undo log(回滚日志) :是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和...如果我们每次在事务执行过程中,都记录下回滚时需要的信息到一个日志里,那么在事务执行中途发生了 MySQL 崩溃后,就不用担心无法回滚到事务之前的数据,我们可以通过这个日志回滚到事务之前的数据。...实现这一机制就是 undo log(回滚日志),它保证了事务的 ACID 特性中的原子性(Atomicity) 。 undo log 是一种用于撤销回退的日志。...我画了一个图,方便大家理解: innodb_flush_log_at_trx_commit 为 0 和 2 的时候,什么时候才将 redo log 写入磁盘?...redo log 和 binlog 有什么区别? 这两个日志有四个区别。

    2.4K43

    MySQL ibdata1共享表空间

    同时你会发现,即使现在有另外一个事务正在将 4 改成 5,这个事务跟 read-view A、B、C 对应的事务是不会冲突的。你一定会问,回滚日志总不能一直保留吧,什么时候删除呢?...答案是,在不需要的时候才删除。也就是说,系统会判断,当没有事务再需要用到这些回滚日志时,回滚日志会被删除。什么时候才不需要了呢?就是当系统里没有比这个回滚日志更早的 read-view 的时候。...由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就会导致大量占用存储空间。...(ibdata1文件不会自动收缩)我见过数据只有 20GB,而回滚段有 200GB 的库。最终只好为了清理回滚段,重建整个库。... grep UNDO_LOG | wc -l19272五、有什么方法可以回收已使用的ibdata1空间呢?

    10310

    全网最通俗易懂的spring框架事务处理总结

    问题3中事务的处理方式有什么不足 (1)不同的数据库访问技术,处理事务的对象,方法不同。JDBC使用的是Connection对象,Mybatis访问对象使用的事SqlSession。...方法不同就需要了解不同数据库访问技术使用事务的原理。 (2)掌握多种数据库中事务的处理逻辑,知道什么时候提交,什么时候回滚。 (3)处理事务的多种方法。...5.怎么解决问题4中的这些不足 spring提供了一种处理事务的统一模型,能使用统一的步骤,方式,完成多种不同数据库访问技术的事务处理。...(1) 事务内部提交,回滚事务,使用的是事务管理器对象,代替我们完成事务的提交commit()和回滚rollback ()操作。事务管理器是一个接口和他的众多实现类。...事务管理器是PlatformTransactionManager接口对象,接口中定义了事务的重要方法:一个是提交commit(),一个是回滚rollback(); 这个接口的实现类有很多:spirng把每一种数据库访问技术对应的事务处理类都创建好了

    44230

    Spring的原理性总结

    applicationContext, 下边就这两种方式进行Bean的声明周期总结: applicationContext: 先用一种生命周期流程图来概括; ?...二、BeanFactory 接口和 ApplicationContext 接口有什么区别 ?     ...这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。...十一、介绍一下Spring的事物管理     事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。...编程式的,比较灵活,但是代码量大,存在重复的代码比较多; 编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.

    3.9K51
    领券