Mysql数据库事务:从未提交读—>MVCC机制—>Next-Key Lock,各种隔离级别及其解决对应问题的原理

为了更好地理清类似脏读、不可重复读、幻读,未提交读、提交读、可重复读、串行化等概念,必需有这样一个认识:即这些概念都是属于数据库四大特性之一——隔离级别下的内容。而所谓的"隔离",当然是为了把问题给隔离和解决掉,而不同的隔离级别解决的便是不同级别的问题。可大致表示为4种隔离级别分别隔离4种问题

​                                   尽是问题 (丢失修改)
                  未提交读—————————————————————————————— (隔离线)
                                   脏读问题
                  提交读————————————————————————————————
                                 不可重复读问题
                  可重复读——————————————————————————————
                                   幻读问题
                  串行化————————————————————————————————

从上可知,隔离级别 "可重复读" 解决的是问题 "不可重复读" ,但不能解决幻读。串行化可以解决所有问题,而对应的未提交读几乎什么问题都解决不了,只能解决最基本的丢失修改。

当然这是一般的情况,如果是Innodb引擎,由于引入了MVCC多版本并发控制和Next-Key Lock等锁机制,从而使得隔离级别 "可重复读" 也能解决幻读问题,那么也就变成了如下

​                                   尽是问题 (丢失修改)
                  未提交读—————————————————————————————— (隔离线)
                                   脏读问题
                  提交读————————————————————————————————
                               不可重复 + 幻读问题
          可重复读/串行化————————————————————————————————

下面便讲解下每种隔离级别解决对应问题的原理


[ 读前应知道:

共享锁,又称S锁、读锁,事务A对一个资源加了S锁后其他事务仍能共享读该资源,但不能对其进行写,直到A释放锁为止。

排它锁,又称X锁、写锁,事务A对一个资源加了X锁后只有A本身能对该资源进行读和写操作,其他事务对该资源的读和写操作都将被阻塞,直到A释放锁为止  ]


1> 未提交读(READ_UNCOMMITED)解决丢失修改

[ 丢失修改:多个事务同时盯上了一个数据,然后各写各的,谁把谁覆盖了都不知道,总之谁写的快谁就会被覆盖丢失信息。]

为了解决丢失修改的写覆盖问题,

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值