MySQL锁机制
一、锁的类型
1、行锁:共享锁(S Lock) 允许事物读一行数据。排它锁(X Lock) 允许事务写一行数据。
2、表锁(意向锁):锁定允许事务在行级上和表级上的锁同时存在。为了支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式。
3、由于InnoDB存储引擎支持的是行级别的锁,因此意向锁其实不会阻塞除全表扫描以外的任何请求。故表级意向锁与行级锁的兼容性如下所示。
4、将上锁的对象看成一颗树,那么对最下层的对象上锁,也就是对最细粒度的对象上锁,那献垴淄睬么首先需要对粗粒度的对象上锁。例如:如果需要对页上的记录r进行上X锁,那么分别对数据库A、表、页上意向锁IX,最后对记录r上X锁。若其中任何一个部分导致等待,那么该操作需要等待粗粒度锁的完成。举例来说,在对记录r加X锁之前,已经有事务对表1进行了S 表锁,那么表1上已存在S锁,之后事务需要对记录R在表1上加IX,由于不兼容,所以该事务需要等待表锁操作的完成。
5、意向锁到底有什么作用?
6、意向锁的主要作用是处理行锁和表锁之间的矛盾,能够显示“某个事务正在某一行上持有了锁,或者准备去持有锁”。
二、锁的算法
1、这里有三种锁的算法,分别为Record Lock、GapLock、Next-Key Lock。
三、mysql如何做到读写并行(多版本控制)
1、多版本并发控制MVCC,是行级锁的一个变种,通过保存数据在某个时间节点的快照,类似实现了行级锁。由此不同事物对同一表,同一骀旬沃啭时刻看到的数据可能是不一样的。实现上通过在不同的数据行后增加创建日期版本号和删除日期版本号,且版本号不断递增,进而实现了数据快照。
2、加锁处理分析:如果要分析加锁情况,必须还要知道以下的一些前提,前提不同,加锁处理的方式也不同。MySQL锁机制(2)继续分析。