mysql事务隔离 原理_MySQL事务隔离级别的实现原理

回顾

知识储备

MVCC

850ac7136ab87afb36ea049a1b88fa01.png

说明

增删查改

SELECT

读取创建版本小于或等于当前事务版本号,并且删除版本为空或大于当前事务版本号的记录。这样可以保证在读取之前记录是存在的。

INSERT

将当前事务的版本号保存至行的创建版本号

UPDATE

新插入一行,并以当前事务的版本号作为新行的创建版本号,同时将原记录行的删除版本号设置为当前事务版本号

DELETE

将当前事务的版本号保存至行的删除版本号

快照读和当前读

一致性非锁定读和锁定读

锁定读

一致性非锁定读

悲观锁和乐观锁

悲观锁,正如它的名字那样,数据库总是认为别人会去修改它所要操作的数据,因此在数据库处理过程中将数据加锁。其实现依靠数据库底层。

乐观锁,如它的名字那样,总是认为别人不会去修改,只有在提交更新的时候去检查数据的状态。通常是给数据增加一个字段来标识数据的版本。

Record Locks(记录锁):在索引记录上加锁。

Gap Locks(间隙锁):在索引记录之间加锁,或者在第一个索引记录之前加锁,或者在最后一个索引记录之后加锁。

Next-Key Locks:在索引记录上加锁,并且在索引记录之前的间隙加锁。它相当于是Record Locks与Gap Locks的一个结合。

理论分析

ac44e5d90a2c630559f5683c798b6f31.png

一致性读保证了可用重复读

间隙锁防止了幻读

演示

7239658b4d7b1a0f32ba93bf5e4ed25d.png

6de52398078c4ad61801157275b19b2b.png

2a6a99dffd4108016c58b8a605b67ba8.png

08efd489e525beef0c6c292439be5e00.png

5c788e0dd044f7ff738241f4424565ec.png

6d3311dadd0631e7b33bdb5a8bc58a9e.png

febf9569cfc47cde9b45608fae4258b8.png

8c5875f3ffe9678aa02ac1b379da00d7.png

:http://www.linuxidc.com/Linux/2018-01/150610.htm

1eadbdb83f3d12eac58d790af91140e1.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值