锁:一条简单的更新语句,MySQL是如何加锁的

相关知识介绍

多版本并发控制

在MySQL默认存储引擎InnoDB中,实现的是基于多版本的并发控制协议——MVCC(Multi-Version Concurrency Control)(注:与MVVC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。

其中MVCC最大的好处是:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的提高了系统的并发性能,在现阶段,几乎所有的RDBMS,都支持MVCC。

其实,MVCC就一句话总结:同一份数据临时保存多个版本的一种方式,进而实现并发控制。

当前读和快照读

在MVCC并发控制中,读操作可以分为两类:快照读与当前读。

快照读(简单的select操作):读取的是记录中的可见版本(可能是历史版本),不用加锁。这你就知道第二个问题的答案了吧。

当前读(特殊的select操作、insert、delete和update):读取的是记录中最新版本,并且当前读返回的记录都会加上锁,这样保证了了其他事务不会再并发修改这条记录。

聚集索引

也叫做聚簇索引。在InnoDB中,数据的组织方式就是聚簇索引:完整的记录,储存在主键索引中,通过主键索引,就可以获取记录中所有的列。

 

posted @ 2021-09-08 16:12  弱水三千12138  阅读(98)  评论(0编辑  收藏  举报