数据库事务并发以及隔离级别,传播方式

很久以前,开始的时候只是看看,了解一下相关知识,如事务的隔离级别,传播方式,等等,所以,先介绍一下本文涉及的几个地方。


一、事务的传播方式与隔离级别,这个能够参考spring博客

http://blog.csdn.net/di1nuli/article/details/8727000


简单来说

1、事务的隔离级别如下

√: 可能出现    ×: 不会出现

脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable read××
Serializable×××


(1)   ISOLATION_READ_UNCOMMITTED  这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

(2)ISOLATION_READ_COMMITTED  保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

因为一个事务里面,两次读取一行数据,第一次读,另一个事务未提交,第二次读,另一个事务提交了,导致两次读取的数据不同,即不可重复读。

同时,因为以上原因,也会造成幻象读。

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)

(3)ISOLATION_REPEATABLE_READ 当隔离级别设置为Repeatable read时,可以避免不可重复读,但是不能避免幻像读。

因为该模式强制要求,一个事务第一次读一行数据,另一个事务必须等待到这个事务完成,所以,这个事务第二次读取的时候,保证数据是相同。

这是MySQL的默认事务隔离级别

(4)ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。


二、事务的传播方式

1、PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

2、PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

3、PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

4、PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

5、PROPAGATION_NOT_SUPPORTED  总是非事务地执行,并挂起任何存在的事务。 

6、PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常








事务数据库操作的一个逻辑单元,它保证了数据的一致性和完整性。事务有四个基本特性,也称为ACID特性: 1. **原子性** (Atomicity):事务中的所有操作要么全部完成,要么全部不做,不会部分执行。 2. **一致性** (Consistency):事务开始前和结束后,数据库的数据都要保持在一致的状态。 3. **隔离性** (Isolation):确保并发环境下的事务看起来像是独自运行,互不影响,包括读未提交、已提交和序列化等隔离级别。 4. **持久性** (Durability):一旦事务提交,其对数据库的影响是永久的,即使系统崩溃也能恢复。 在并发环境下,隔离级别用于解决可能出现的问题,常见的隔离级别有: - **读未提交(Read Uncommitted)**:允许读取其他事务未提交的数据,可能导致脏读。 - **已提交(Read Committed)**:只读取已经提交的数据,避免脏读,但仍存在幻读。 - **可重复读(Repeatable Read)**:在此级别下,一次事务的多次读取结果不变,但可能会看到幻灭现象(因为其他事务的插入)。 - **串行化(Serializable)**:最严格的级别,强制事务按照某种顺序执行,完全消除幻读。 事务传播属性定义了当在一个事务中调用另一个事务时的行为,如: - **支持(Support)**:默认值,如果目标操作在当前事务中,就执行。 - ** Requires**:只有当目标操作成功才会继续。 - ** Not Supported**:禁止嵌套事务。 - ** Requires New**:在新的事务上下文中执行。 - ** MANDATORY**:如果目标操作在事务中,强制其成为新事务的一部分。 - ** REQUIRES NEW**:总是新建一个新的事务来执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值