Mysql 事务的隔离性(隔离级别)

MySQL中的事务分为自动提交和手动提交,默认是自动提交。事务的隔离性用于避免并发操作带来的数据不一致,包括读未提交、读提交、可重复读和串行化四个级别。读未提交可能导致脏读,读提交则可能出现不可重复读,而可重复读(MySQL默认级别)虽解决不可重复读,但可能有幻读。串行化虽消除所有并发问题,但效率最低。

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

Mysql 中的事务分为手动提交和自动提交,默认是自动提交,所以我们在Mysql每输入一条语句,其实就会被封装成一个事务提交给Mysql服务端。

手动提交需要先输入begin,表示要开始处理事务,然后就是常见的sql语句操作了,操作完毕以后锁看到的都是临时处理结果,最后需要输入commit才会真正更新到磁盘。


          目录

1、什么是事务

2、事务为什么要有隔离性?

3、隔离级别的分类

(1) 读未提交(Read Uncommitted)

(2) 读提交(Read Committed)

(3) 可重复读(Repeatable Read)

(4) 串行化(Serializable)


1、什么是事务

我们在火车站买票,买票和取票的过程可以看做是一个完整的过程(不可能买了票就走人)。但是站在售票员的角度,有人来买票以及取票需要做两个不同的动作(预定座位和发放纸质车票)

换到Mysql,我们作为用户,我们买到票以后取票,这就是一个事务;站在Mysql的角度,事务不过是多个sql语句的集合,第一条sql语句预定位置,第二条sql语句查询并打印车票。

2、事务为什么要有隔离性?

仍然以买票为例,不同售票窗口虽然服务的是不同用户,但是访问的是同一个数据库,一个窗口刚好在办理售票业务,即预定位置,但是此时突然另一个窗口也要预定位置,这两个并发的业务都要预定位置,但是位置只有一个,但是也不能让这两个业务同时成功。

因此,事务具有隔离性的原因是避免并发带来的不一致性,为防止两个事务相互影响,才有了四种隔离级别。

3、隔离级别的分类

Mysql 下的并发是不可避免的,不同的场景下对并发的接受程度也会不一样,比如买票就不允许两个人买到同一个座位,但如果是商店购物,两个人同时要来结账,依次处理结账事务是完全可以接受的。

依据不同的场景,Mysql允许不同程度的并发干扰,也就是隔离级别,Mysql 下的隔离级别有4种:

  • 读未提交  【Read Uncommitted】
  • 读提交      【Read Committed】
  • 可重复读  【Repeatable Read】
  • 串行化     【Serializable】

(1) 读未提交(Read Uncommitted

意义:在该隔离级别下,可以看到其他事务尚未提交的执行结果。

存在的问题:这种情况下其他事务会受到临时执行结果的影响,如果线程B读取到线程A没有提交的事务,我们称之为“脏读”。这种级别相当于没有隔离性,因为线程A在提交事务之前随时都可以取消当前事务。

注意:一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种现象叫做脏读

(2) 读提交(Read Committed

意义:该隔离级别是大多数数据库的隔离级别(不是MySQL默认的)。一个事务可以读取到其他事务提交以后的结果(或者说事务处理结束的结果)

存在的问题:这种情况下存在一定的问题,比如事务线程B执行到某个 if 判断语句,其他事务把当前 if 语句的判断条件改变了,这就直接影响到了当前事务的逻辑判断。我们把这种情况称为“不可重复读”。

(3) 可重复读(Repeatable Read

意义:MySQL默认的隔离等级,当前正在执行的事务无法看到其他事务的任何执行结果(无论是临时还是提交结果),直至当前事务提交(执行结束)。一定程度上解决了上面读提交引起的“不可重复读”问题。

注意事项:其他事务 insert 的数据可以被当前正在执行的事务读取到,导致查询时会多出新的记录,这种现象叫做“幻读”,如果出现了幻觉一般。但是MySQL在该级别下是解决了幻读问题的,采用的方式为 Next-Key 锁。

(4) 串行化(Serializable

意义:所有的事务按照顺序依次处理,不会存在并发问题,但是效率极低。一般不会采用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值