在《一张表格让你彻底学会MySQL锁机制中的三种核心锁类型!》中我们详细介绍了三种核心锁类型:共享锁、排他锁和意向锁。如果按照锁的粒度(Lock Granularity)划分(锁的粒度指的是锁定的数据范围大小),我们可以分成行级锁、页级锁和表级锁。接下来我们将着重介绍这三种锁:
特性 | 行级锁 (Row-Level Lock) | 页级锁 (Page-Level Lock) | 表级锁 (Table-Level Lock) |
---|---|---|---|
名字 | Row-Level Lock | Page-Level Lock | Table-Level Lock |
锁定范围 | 数据库表中的单一行记录 | 数据库存储的一页(Page),包含多行记录 | 整张数据库表 |
核心作用 | 实现最大程度的并发,只锁定需要操作的具体行,允许其他事务访问表中的其他行。 | 在并发性能和管理开销之间取得平衡,锁定一个数据页。 | 实现简单,一次性锁定整个表,保证操作的简单性和隔离性。 |
生动类比 | 精确定位:像只锁上一个特定的座位,其他人可以坐其他空位。 | 分区管理:像锁上健身房的一个器械区(含多个器械),不影响其他区域使用。 | 全场包场:像锁上整个健身房,不允许任何人进入,无论使用哪个器械。 |
兼容性 | 高。不同事务可以同时锁定和操作不同的行,兼容性好。 | 中。操作不同页的事务可并发,操作同一页的事务会阻塞。 | 极低。任何写操作都会独占整个表,导致严重阻塞。 |
性能影响 | 高并发,高开销。 优点:并发度最高,冲突概率最低。 缺点:管理开销最大(需维护大量锁对象)。 | 折中方案。 优点:开销和并发性介于行锁和表锁之间。 缺点:锁粒度不精确,可能导致“假冲突”。 | 低并发,低开销。 优点:实现简单,开销最小(只需一个锁)。 缺点:并发性能最差,成为性能瓶颈。 |
代表引擎 | MySQL InnoDB, PostgreSQL, Oracle | Microsoft SQL Server (传统用法), Sybase | MySQL MyISAM |
那种锁好呢?从锁机制角度选择,应优先采用支持行级锁的存储引擎(如InnoDB)。 因为绝大多数现代应用都是“读多写少”的混合型场景,行级锁在更新操作时仅锁定必要的行,极大提升了并发查询和更新的性能,避免了表级锁在少量更新时导致整个表被锁定的性能瓶颈。虽然行级锁的管理开销略大,但相较于它带来的高并发优势,这点开销通常是值得的。表级锁(如MyISAM)仅适用于真正的只读或近乎只读(如数据仓库、报表库)的特殊场景,在需要任何并发写的Web应用或OLTP系统中已不再是最佳选择。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程