java事务四中隔离级别,数据库事务和四种隔离级别

本文详细阐述了数据库事务的四种隔离级别——未提交读、提交读、可重复读和可串行化,以及它们如何处理脏读、不可重复读和幻读等问题。在不同的隔离级别下,数据库对数据一致性和并发性的权衡有所不同,例如,快照读机制在提高并发性的同时,可能引发不可重复读或幻读。可串行化级别虽然确保数据一致性,但可能导致性能下降。
摘要由CSDN通过智能技术生成

三种bug:

脏读:

例:insert into T values (4, '牛D');,然后没commit。

其他进程SELECT读取到的数据是未commit的数据。(数据库只修改了内存没修改外存)

不可重复读:

例:一个事务范围内两个相同的查询却返回了不同数据(因为中间有进程修改了值并且提交成功)

幻读:

例:某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。

READ UNCIMMITTED(未提交读)

在这种隔离级别下,查询是不会加锁的,也由于查询的不加锁,所以这种隔离级别的一致性是最差的,可能会产生“脏读”、“不可重复读”、“幻读”。

READ COMMITTED(提交读)

就是只能读到已经提交了的内容。

为什么提交读,未提交读都没有查询加锁,但是却能够避免脏读呢?

这就要说道另一个机制-快照(snapshot)

当B insert了一条数据然后commit,这时候A执行 select,那么返回的数据中就会有B添加的那条数据......之后无论再有其他事务commit都没有关系,因为照片已经生成了,而且不会再生成了,以后都会参考这张照片。

假设没有“快照读”,那么当一个更新的事务没有提交时,另一个对更新数据进行查询的事务会因为无法查询而被阻塞,这种情况下,并发能力就相当的差。

而“快照读”就可以完成高并发的查询,不过,“读提交”只能避免脏读,并不能避免“不可重复读”(插入INSERT不是更新UPDATE)和“幻读”。

ec1a059a3de139a305073b1388d596c8.png

REPEATABLE READ(可重复读)(mysql默认的隔离级别)

普通的查询同样是使用的“快照读”,但是,和“读提交”不同的是,当事务启动时,就不允许进行“修改操作(Update)”了,而“不可重复读”恰恰是因为两次读取之间进行了数据的修改,因此,“可重复读”能够有效的避免不可重复读,但却避免不了“幻读”,因为幻读是由于“插入或者删除操作(INSERT or DELETE)”而产生的,而不是更新(UPDATE)。

ffed134001233afc6590a0c8243b4200.png

SERIALIZABLE(可串行化)

这种级别下,事务“串行化顺序执行”,也就是一个一个排队执行。由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别。

7a088cb7dff884b308793eee374cb3a7.png

a3300795abfce3a95f3e6f3f83856a65.png 

cc58527c8cebafd257d99526821c0230.png 

e63f10b6450262a8dc2835bde4edc60f.png 

bd8a8eb53c48d6f76d4387cfab79e6ef.png 

73ece600e3ad9ca8bfdada2531fada5b.png 

c263a8648f81b62dcff7a52e54f7ccd0.png 

620dbcdfba5abdbdac0e46bec5a094d6.png 

fd04bc3ad0cc95bef7e0bc18225008c1.png

4646dc1743c6c74efa9cc7032e1bc86a.png 

ad075a15b274328e0d71236cbf5068ea.png 

8d94e9fdf1f81a3e6fc580070d865f7f.png 

5e6642757f23363e410344f54136018a.png 

95721372af799a0072a9fcb1e69df54d.png 

78b6fadd260a523e6474a6ff77979751.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值