MySQL数据库锁的分类
最近看了下MySQL数据库中锁相关的知识,这里将看完之后记忆的东西做下记录。
-
按照锁的粒度分:
- 表锁,特点:锁粒度较粗,加锁简单,
- 行锁,特点:锁粒度较细,加锁较复杂,
- 其中行锁包括记录锁(对单条记录加锁),gap锁,next-key锁,插入意向锁;
- 记录锁能避免脏读和可重复读;
- gap锁锁的是记录间隙,能够避免脏读,可重复读和幻读;
-
按照锁的属性分:
- 共享锁(S锁)
- 排他锁(X锁)
- 共享锁和排他锁的兼容情况如下表所示:
| | X | S |
|–|--|–|
| X | 不兼容 | 不兼容 |
| S | 不兼容 | 兼容 |
-
按照锁的状态分:
- 意向共享锁(IS锁)
- 意向排他锁(IX锁)
- 意向共享锁和意向排他锁属于表锁
- 意向共享锁:如果要对表中的记录加共享锁,则会对表加意向共享锁;
- 意向排他锁:如果要对表中的记录加排他锁,则会对表加意向排他锁;
- 加意向共享锁和意向排他锁的作用:能够避免对表加索之前,对表中的记录进行遍历,以确定表中记录是否加了排他锁和共享锁。