JDBC事务的隔离级别

本文详细介绍了JDBC事务的隔离级别,包括脏读、不可重复读和幻读等并发问题,以及四大隔离级别:串行化、可重复读、读已提交和读未提交。还提及了MySQL和Oracle的默认隔离级别,并提供了设置JDBC事务隔离级别的示例代码。
摘要由CSDN通过智能技术生成

----------------------------------------------JDBC事务的隔离级别----------------------------------------------------

事务隔离级别

 

l  隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

(准确的说隔离级别是可以设置的,可以设置为事物之间相互干扰,也可以设置为事务之间不会相互干扰,主要体现在两个事务一个在写数据,一个在读数据,对读的一方是有影响的)

Ø  事务的并发读问题

l  脏读:读取到另一个事务未提交数据;

l  不可重复读:两次读取不一致;

l  幻读(虚读):读到另一事务已提交数据。

 

Ø  2 五大并发事务问题

因为并发事务导致的问题大致有5类,其中两类是更新问题,三类是读问题。

 

l  脏读(dirty read):读到未提交更新数据

 

时间

转账事务A

取款事务B

T1

 

开始事务

T2

开始事务

 

T3

 

查询账户余额为1000元

T4

 

取出500元把余额改为500元

T5

查看账户余额为500元(脏读)

 

T6

 

撤销事务,余额恢复为1000元

T7

汇入100元把余额改为600元

 

T8

提交事务

 

  

A事务查询到了B事务未提交的更新数据,A事务依据这个查询结果继续执行相关操作。但是接着B事务撤销了所做的更新,这会导致A事务操作的是脏数据。(这是绝对不允许出现的事情)

 

l  虚读(幻读)(phantom read):读到已提交插入数据

 

时间

统计金额事务A

转账事务B

T1

 

开始事务

T2

开始事务

 

T3

统计总存款数为10000元

 

T4

 

新增一个存款账户,存款为100元

T5

 

提交事务

T6

再次统计总存款数为10100元

 

 

  A事务第一次查询时,没有问题,第二次查询时查到了B事务已提交的新插入数据,这导致两次查询结果不同。(在实际开发中,很少会对相同数据进行两次查询,所以可以考虑是否允许虚读)

 

l  不可重复读(unrepeatable read):读到已提交更新数据

 

时间

取款事务A

转账事务B

T1

 

开始事务

T2

开始事务

 

T3

 

查询账户余额为1000元

T4

查询账户余额为1000元

 

T5

 

取出100元,把余额改为900元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值