MySQL事务隔离级别&MVCC特性

1、事务的四个特性ACID

原子性(Atomicity):事务被视为一个不可分割的工作单位,事务中的操作要么全部执行,要么全部不执行

一致性(Consistency):事务的执行应确保数据库从一个一致的状态转换到另一个一致的状态,即事务的执行不应破坏数据库的完整性约束

隔离性(Isolation):多个事务并发执行时,一个事务的执行不应被其他事务所影响,这意味着每个事务都独立运行,彼此之间没有干扰

持久性(Durability):一旦事务提交,其对数据库的修改应该是永久的,即使系统发生故障也不会丢失

2、事务的四个隔离级别

Read Uncommitted(未提交读):这是最低的隔离级别,一个事务可以读取到另一个事务尚未提交的数据变更。这种级别可能会导致脏读(Dirty Read),即读取到未提交的数据,可能会在后续被回滚,从而导致读取到的数据实际上是无效的。‌

Read Committed(已提交读):在这个级别上,一个事务只能看到其他事务已经提交的数据更改。这避免了脏读问题,但不能阻止不可重复读和幻读的发生。

Repeatable Read(可重复读):在同一事务内的多次相同查询始终会返回相同的结果,即使其他事务在此期间对数据进行了修改并提交。这是MySQL InnoDB存储引擎的默认事务隔离级别,通过Next-Key Lock锁算法实现此隔离级别,防止了幻读的发生。

Serializable(可串行化):这是最高的隔离级别,它强制事务按顺序执行,好像它们是唯一运行在系统中的事务一样。它提供了最严格的事务隔离,但也可能导致大量超时和锁竞争问题。

3、MVCC特性的原理

MVCC多版本并发控制,通过redo+undo实现,事务隔离级别可以判断当前版本的数据是否可见,undo保存了事务提交前的所有历史版本,如果要查看的事务对应的数据,在当前会话的隔离级别下是不可见的,则会通过undo保存的历史版本进行查询。

事务执行过程示例:

4、mvcc是否解决了幻读

幻读:在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读,而多出来或者少的哪一行被叫做幻行。

快照读:mysql通过mvcc来避免幻读

当前读:mysql通过next-key来避免幻读

不能把快照读和当前读得到的结果不一样这种情况认为是幻读,这是两种不同的使用,所以mysql的rr级别是解决了幻读的。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DRink 冰阔落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值