事务回滚

大厂面试必知必会:图解分布式事务实现原理

让人想犯罪 __ 提交于 2019-12-19 17:12:33
问题场景 什么是事务? 事务是数据库从一个稳定状态变迁到另一个稳定状态的保证,具备 ACID 这 4 个特性: 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态。 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性限制没有被破坏。 隔离性(Isolation):两个事务的执行是互不干扰的,两个事务时间不会互相影响。 持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。 例如应用程序需要更新多条相关数据时就需要进行事务处理。 什么是分布式事务? 当遇到复杂业务调用时,可能会出现跨库多资源调用(一个事务管理器,多个资源)/多服务调用(多个事务管理器,多个资源),期望全部成功或失败回滚,这就是分布式事务,用以保证“操作多个隔离资源的数据一致性”。 分布式事务与 XA 规范 分布式事务是指会涉及到操作多个数据库的事务,同样必须保证 ACID。其就是将对同一库事务的概念扩大到了对多个库的事务:对同一库的 SQL 操作对应了分布式事务中对一个库的事务。 X/Open XA 定义了分布式事务处理的规范,并由数据库厂商在驱动层面进行实现。XA 规范的基础是两阶段提交协议

事务

我与影子孤独终老i 提交于 2019-12-19 03:10:21
事务与并发写 某个正在更新的记录在提交或回滚前不能被其他事物同时更新 先加锁后修改 等待锁释放 事物的ACID 原子性Atomic : 要么全部执行,要么全部不执行,中途数据库发生异常,未提交的事物都被回滚 一致性Consistency : 数据库从一种正确状态转为另一种正确状态,数据库在修改时保证数据的正确性合理性一致性 隔离性Isolation 事务正确提交完成前,中间的任何数据变化对其他的事物都是不可见的 持久性Durability : 事物一旦提交就永久保存…数据库写在事务日志异步更新到磁盘,使用事务日志持久化实现只要是性能方面的考虑 四种隔离级别 1读未提交:读到未提交的数据 2读已提交:两次读取到的数据不一致(不可重复读) 3可重复读 mysql默认隔离级别 4串行化:读写数据会锁表.并发性能低 并发事务问题 脏读,读取他人未提交事物 不可重复读:其他事务对数据进行了修改 幻读:其他事务对数据进行了增加或删除 查看数据库默认的隔离级别 select @ @tx_isolation ; 默认级别可重复读 REPEATABLE - READ 设置隔离级别为–读未提交 set tx_isolation = 'read-uncommitted' ; select @ @tx_isolation ; READ - UNCOMMITTED 读已提交 --解决脏读 set tx

碰到嵌套事务-笔记

让人想犯罪 __ 提交于 2019-12-18 13:35:39
相关SQL语句: BEGIN TRAN SAVE TRAN COMMIT TRAN ROLLBACK TRAN 嵌套事务示例: BEGIN TRAN Tran1 BEGIN TRAN Tran2 COMMIT TRAN 可以单独指定某个事务名,如Tran1,Tran2进行提交。其实也没什么效果,即使Tran2提交成功了,只要将外层事务Tran1回滚,Tran2保存的数据照样被回滚! ROLLBACK TRAN 不能指定某个事务名进行回滚!只能ROLLBACK TRAN 或者 ROLLBACK TRAN Tran1,也就说只能回滚最外层的事务名。如果执行ROLLBACK TRAN Tran2,SQL会提示“无法回滚 Tran2。找不到该名称的事务或保存点”,出错的原因就是因为Tran2不是最外层事务。总结一句话:ROLLBACK 要么就所有事务都回滚,要么就回滚时异常,一个事务都没回滚! ROLLBACK 可以回滚某个事务保存点(SAVE TRAN TranSave1), 如ROLLBACK TRAN TranSave1,但是要明白的是,回滚事务保存点并不会使事务数@TranCount减少,你嵌套了几个事务,它还是有几个事务数. 特别注意,如果在父存储过程创建一个事务Tran1,然后在子存储过程执行ROLLBACK TRAN后,子存储过程会抛出异常!事务只能在同一个存储过程里面创建

@Transactional

给你一囗甜甜゛ 提交于 2019-12-18 09:12:38
@Transactional 事务管理的目的 在出现异常的情况下,保证数据的一致性;数据提交操作回滚至异常发生前的状态 事务管理的方式: Spring(Spring Framework 提供对事务管理的抽象接口) 支持两种事务管理方式: 编程式事务管理:使用TransactionTemplate或PlatformTransactionManager实现 声明式事务管理:建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务(此处取决于事务的传播行为),在执行完目标方法之后根据执行情况提交或者回滚事务(执行成功则提交,失败则进行实物的回滚) 编程式事务管理优势:可以控制事务的粒度,最细粒度到代码块级别; 声明式实物管理优势:在方法外进行声明,事务控制的代码不会与业务逻辑代码混在一起,最细粒度到方法级别(解决方法:可以将需要进行事务管理的代码块独立为方法,通过方法间调用实现);符合spring倡导的非侵入式的开发方式,即业务处理逻辑代码与事务管理代码不放在一起 声明式事务管理实现方式: 基于tx和aop名字空间的xml配置文件 // 基本配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns

分布式事务 业内方案对比

北城余情 提交于 2019-12-17 02:44:45
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。 ACID 指数据库事务正确执行的四个基本要素: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) CAP CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。 一致性 :在分布式系统中的所有数据备份,在同一时刻是否同样的值。 可用性 :在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。 分区容忍性 :以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。 BASE理论 BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是: 我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。 Basically Available(基本可用) Soft state(软状态) Eventually consistent(最终一致性)

@Transactional 事务注解

℡╲_俬逩灬. 提交于 2019-12-16 23:46:12
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class)简单解析:如果有事务,那么加入事务,没有的话新建一个; 串行化最高级隔离级别; 遇到异常回滚。 @Transactional之value value这里主要用来指定不同的事务管理器;主要用来满足在同一个系统中,存在不同的事务管理器。比如在Spring中,声明了两种事务管理器txManager1, txManager2. 然后,用户可以根据这个参数来根据需要指定特定的txManager. @Transactional之propagation(service中调用其他service时需要注意) @Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认情况下) @Transactional(propagation=Propagation.NOT_SUPPORTED) 容器不为这个方法开启事务 @Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕

SQL SERVER 事务处理

别来无恙 提交于 2019-12-16 18:24:17
<1>.事务的概念 事务是一个不可分割的工作逻辑单元。 <2>.为什么使用事物 可以防止错误的发生。 <3>.事物的作用 要么所有的操作全部完成,要么所有操作都不执行。 <4>.什么是事物 事务是单个的工作单元 如果某一事务成功,则在该事务中进行的所有的数据更改均会提交,称为数据库中的永久组成部分。 如果事务遇到错误且必须取消或回滚,则所有数据更改均被清楚。 <5>.事务的特性 事务必须具备以下四个属性,简称ACID 属性: (1). 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。 (2). 一致性(Consistency):当事务完成时,数据必须处于一致状态。 (3). 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。 (4). 永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。 <6>.如何创建事务 1. T-SQL使用下列语句来管理事务: (1). 开始事务:BEGIN TRANSACTION (2). 提交事务:COMMIT TRANSACTION (3). 回滚(撤销)事务:ROLLBACK TRANSACTION 2. 一旦事务提交或回滚,则事务结束。 (1).

Spring五个事务隔离级别和七个事务传播行为

跟風遠走 提交于 2019-12-15 04:02:19
转至https://www.cnblogs.com/wj0816/p/8474743.html 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。spacer.gif …数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来。 下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么

drop、truncate和delete的区别

心已入冬 提交于 2019-12-15 03:06:31
delete删除的时候可以配合事务,将删除掉的数据找回,回滚roolback,还可以加where删除条件,只删除数据,表结构还在 truncate不跟删除条件,不可回滚,删除所有的数据和表结构,自增id会重置 drop不跟删除条件,不可回滚,删除所有的数据和表结构,重新复制一张新的表结构,自增id不重置 来源: CSDN 作者: CoralJIao 链接: https://blog.csdn.net/Cjiaocsda1127/article/details/103465338

关于Spring事物的面试题

南楼画角 提交于 2019-12-13 12:02:29
数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来。 下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。 事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。 事务最重要的 两个特性 ,是事务的传播级别和数据隔离级别。 传播级别定义的是事务的控制范围, 事务隔离级别定义的是事务在数据库读写方面的控制范围。 事务的7种传播级别: 1) PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么就加入到事务中执行,如果当前上下文中不存在事务,则新建事务执行。所以这个级别通常能满足处理大多数的业务场景。 2)PROPAGATION_SUPPORTS ,从字面意思就知道,supports,支持,该传播级别的特点是,如果上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行。所以说,并非所有的包在transactionTemplate.execute中的代码都会有事务支持。这个通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。 3)PROPAGATION_MANDATORY , 该级别的事务要求上下文中必须要存在事务,否则就会抛出异常