问三:说说事务的隔离级别?

本文深入解析SQL标准定义的四种事务隔离级别:Readuncommitted、Readcommitted、Repeatableread和Serializable,针对更新丢失、脏读、不可重复读及幻读等问题提供解决方案。特别关注MySQL如何使用MVCC和间隙锁解决幻读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务的隔离级:

SQL标准定义了四种不同隔离级别,并在这四种隔离级别上分别解决:

1.Read uncommitted 能够防止更新丢失的问题

2.Read committed 解决脏读问题

3.Repeatable read 解决不可重复读问题,但是mysql在这个级别就解决了幻读

4.Serializable(可串行化) 解决幻读问题。

注:

1、mysql默认隔离级别是Repeatable read,通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)解决幻读

2、Multi-Version Concurrency Control (MVCC)


关于各种事务问题的详解:

1.更新丢失:mysql所有事务隔离级别在数据库层面都能都避免(示例如图1)

2.脏读:一个事务读到另一个事务未提交的更新数据,READ-COMMITTED事务隔离级别以上可以避免(示例如图2)

3.不可重复读:同一个事务中两次读取数据发生改变,这种改变是由另一个事务修改了对应记录引起的,REPEATABLE-READ事务隔离级别以上可以避免

4.幻读:在同一事务中,同一查询多次进行时候,由于其他事务插入操作(insert)的事务提交,导致每次返回不同的结果集(查到的数据增多或者减少),SERIALIZABLE事务隔离级别可以避免

(图1 更新丢失)

(图2 )


其他附加问题:

1、不可重复读和幻读的区别?

不可重复读的重点是修改。同样的条件, 你读取过的数据, 再次读取出来发现值不一样了

幻读的重点在于新增或者删除。同样的条件, 第1次和第2次读出来的记录数不一样

2、事务隔离级别越高越好吗?

为了实现数据库事务,会消耗系统资源,同时也会在较低事务隔离级别的基础上添加一些如多版本并发控制、间隙锁这样的判断或锁,也会消耗时间,因而事务级别过高会降低查询效率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值