MySQL--行级锁与表级锁
原文网址:MySQL—行级锁与表级锁_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍MySQL的行级锁与表级锁。
锁的类型
锁类型 | 死锁 | 锁定粒度(并发性) | 适用场景 |
表级锁 | 不会死锁 | 最大,发生锁冲突的概率最大(并发性低) | 场景1:读多写少; 场景2:写特别多。若用行锁,会导致事务执行效率低,可能造成其他事务长时间锁等待和锁冲突。 |
行级锁 | 会死锁 | 最小,发生锁冲突的概率最低(并发性最高) | 并发量大。 |
页面锁 | 会死锁 | 居中,并发一般 |
不同的存储引擎的锁机制
存储引擎 | 支持的锁 | 说明 |
InnoDB | 表级锁、行级锁(默认)。 | InnoDB行级锁基于索引实现。若查询字段无索引或索引失效,则使用表锁。 |
MyISAM | 表级锁 | |
MEMORY | 表级锁 | |
BDB | 表级锁、页面锁 |
行锁
概述
说明
行锁只在InnoDB中。有两种锁:共享锁(Share Lock)(也称为:读锁)、独占锁(Exclusive Lock)。共享锁也称为:读锁;独占锁也称为:写锁。
InnoDB实现了以下两种类型的行锁。意向锁是InnoDB自动加的,不需用户干预。
- 共享锁(S):允许获得共享锁的事务去读一行,阻止其他事务获得相同数据集的排他锁。
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁。另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。(Intention Share)
- 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。(Intention Exclusive)
上述锁模式的兼容情况具体如下表所示。如果一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。
上边只是部分内容,为便于维护,本文已迁移到此地址:MySQL-行级锁与表级锁 - 自学精灵
还没有评论,来说两句吧...