什么是事务?
从四个关键概念谈起:
原子性 – 所有操作要么都成功,要么都失败
一致性 – 事务不能违反完整性约束(比如虽然事务还未提交,但仍需遵守各种约束规则,这些规则是在事务提交之前而非在事务提交以后才生效!)
隔离性 – 一个事务的效果,不影响正在同时执行的其它事务,那么,不影响的程度如何呢?这个由隔离级别来定义,标准的隔离级别有下列四种:
未提交读(read uncommitted)
提交读(read committed)
重复读(repeatable read)
序列化(serializable)
通过一些现象可看出隔离级别的效果:
脏读 – (dirty read) 当一个事务读取另一个事务尚未提交的修改时,产生脏读。
不可重复读 – (nonrepeatable read) 同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。
幻读 – (phantom read) 同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。
Dirty Read NonRepeatable Read Phantom Read
Read uncommitted Possible Possible Possible
Read committed Not possible Possible Possible
Repeatable read Not possible Not possible Possible
Serializable Not possible Not possible Not possible
持久性 – 一旦事务成功完成,则数据必需保证已经正确的持久化(保存)!
JDBC事务与JTA事务
JDBC事务只能支持一个数据库(单数据源),而JTA可以支持分布式的事务(多数据源)。
JDBC事务,一般由数据库本身来执行提交或回滚操作(单阶段提交)。所有数据库都有它自己的事务管理器,这些管理器只能处理其自身的事务(称为本地事务)。
而JTA则不同,JTA要支持多个数据源,站在更高的角度上,提供一个“事务处理监视器(TPM)”来管理和协调这些数据源之间的事务操作。它必需执行两阶段提交(2PC)协议。
准备阶段 – TPM向所有RM(资源管理器,即数据库)确认状态,是否可以提交或回滚
提交阶段 – TPM确认提交之后,向所有RM发出提交指令(或回滚)
TPM本身会维护事务日志,以保证持久性(灾难恢复等)
传播特性
Not Supported – 不支持,如果当前有事务上下文,将挂起当前的事务
Supports - 支持,如果有事务,将使用事务,如果没有事务,将不使用事务
Required - 需要,如果当前有事务上下文,将使用当前的上下文事务,如果没有,将创建新的事务
Required New - 需要新的事务,如果当前有事务上下文,将挂起当前的事务,并创建新的事务去执行任务,执行完成之后,再恢复原来的事务
Mandatory - 当前必须要有事务上下文,如果当前没有事务,将抛出异常
Never - 当前必须不能有事务上下文,如果有事务,将抛出异常
分享到:
相关推荐
事务传播特性&事务隔离级别 详细的事务传播特性&事务隔离级别
spring事务的传播特性和事务隔离级别
java事务传播特性&事务隔离级别...
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
事务的属性:1.Propagation:用来设置事务的传播行为事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启了一个新
有关JDBC事务 JTA事务 传播特性 隔离级别等等
spring 事务传播与隔离级别DEMO 脏读、重复读、幻影读 spring 事务传播与隔离级别DEMO 脏读、重复读、幻影读
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
本文档介绍了spring事务隔离级别的使用及详解
数据库事务和隔离级别
06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf
Spring事务的传播特性和隔离级别 事务的几种传播特性详细介绍
MySQL事务隔离级别详解,这个面试经常会面到,必会呀,哈哈
MySQL的四种事务隔离级别 1、脏读 2、不可重复读 3、幻读
隔离性强制对事务进行某种程度的隔离,保证应用程序在事务中看到一致的数据。 MySQL提供了下面4种隔离级:序列化(SERIALIZABLE)、可重复读(REPEATABLE READ)、提交读(READ COMMITTED)、未提交读(READ ...
• InnoDB实现了SQL92标准中的四种隔离级别 (1)读未提交:select不加锁,可能出现读脏; (2)读提交(RC):普通select快照读,锁select /update /delete 会使用记录锁,可能出现不可重复读; (3)可重复读(RR):普通...
SQLSERVER事务隔离级别的实验研究.pdf
02.Spring支持的常用数据库事务传播属性和事务隔离级别
NULL 博文链接:https://cuishuangjia.iteye.com/blog/964885
Spring 事务隔离与事务传播的详解与对比 Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式。声明式就是在Spring的配置文件中...