MySQL-InnoDB常用锁类型解析

Shared(乐观锁) and Exclusive Locks(互斥锁):

        InnoDB有两种锁类型,Shared(s) and Exclusive(x) Locks(乐观锁和互斥锁)。

        Shared(s)Locks:允许持有该锁的事务读取数据;

        Exclusive(x) Locks:允许持有锁的事务插入,更新或修改数据;

如果事务T1在r记录上持有s锁,这个时候事务T2申请对r加锁,锁的处理方式有以下两种:

  1.      如果T2申请获取r记录的s锁,T2会立即获取s锁,这时T1和T2都有r记录的s锁;
  2.      如果T2申请获取r记录的x锁,此时T2会等待获取x锁;

注意:如果T1持有r记录的x锁,这时T2事务申请r记录任何类型(包括s锁和x锁)的锁都需要等待T1释放r记录的x锁。

 

Record Locks

记录锁作用于索引记录(行)上。例如:SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;任何事务要求对c1 = 10这条记录进行插入,更新或删除,都会立即阻塞。

record lock只会对索引记录进行加锁(index record),即使表中不存在任何索引(包括primary key)。这时MySQL会默认的给table创建聚合锁(clustered index),并且给行记录进行加锁的时候会使用它。

当使用 SHOW ENGINE INNODB STATUS语句时会展示如下信息


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部