mysql事务中隔离级别和锁

本文介绍了MySQL InnoDB引擎支持的四种SQL事务隔离级别:REPEATABLE READ(默认)、READ COMMITTED、READ UNCOMMITTED及SERIALIZABLE。重点讨论了REPEATABLE READ级别的实现原理及其在实际应用中可能遇到的问题,并对比了SERIALIZABLE级别的不同。

mysql的innob引擎支持标准sql事务的四个级别

REPEATABLE READ(默认)
     | READ COMMITTED
     | READ UNCOMMITTED
     | SERIALIZABLE

默认是可以重复读,以repeatable_read 为例,默认情况它使用了Consistent Nonlocking Reads,其实就是多版本快照方式,一个repeatable_read 事务里面,第一次读取从数据库取,然后这个数据放入快照里面,后面的读取都是从快照里面取,这样虽然保证了一个事务里面读取的数据的一致性,但是会出现其他事务已经改了数据库里面的值,而当前事务却还在使用老的数据。如果对于数据的同步要求很高的话,可以在sql上面使用锁,

select ... lock in share mode; //共享锁,可同时读,不能同时写
select ... for update; // 排他锁,独占

但是用锁,肯定影响性能,至少mysql没有使用锁来实现repeatable-read隔离级别。

如果是SERIALIZABLE级别,mysql倒是会自动的将select转化为select ... LOCK IN SHARE MODE,即使用了共享锁。

转载于:https://my.oschina.net/yybear/blog/103235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值