《一张表格让你彻底学会MySQL锁机制中的三种核心锁类型!》中我们详细介绍了三种核心锁类型:共享锁、排他锁和意向锁。如果按照锁的粒度(Lock Granularity)划分(锁的粒度指的是锁定的数据范围大小),我们可以分成行级锁、页级锁和表级锁。接下来我们将着重介绍这三种锁:

特性行级锁 (Row-Level Lock)页级锁 (Page-Level Lock)表级锁 (Table-Level Lock)
名字Row-Level LockPage-Level LockTable-Level Lock
锁定范围数据库表中的单一行记录数据库存储的一页(Page),包含多行记录整张数据库表
核心作用实现最大程度的并发,只锁定需要操作的具体行,允许其他事务访问表中的其他行。并发性能管理开销之间取得平衡,锁定一个数据页。实现简单,一次性锁定整个表,保证操作的简单性和隔离性。
生动类比精确定位:像只锁上一个特定的座位,其他人可以坐其他空位。分区管理:像锁上健身房的一个器械区(含多个器械),不影响其他区域使用。全场包场:像锁上整个健身房,不允许任何人进入,无论使用哪个器械。
兼容性。不同事务可以同时锁定和操作不同的行,兼容性好。。操作不同页的事务可并发,操作同一页的事务会阻塞。极低。任何写操作都会独占整个表,导致严重阻塞。
性能影响高并发,高开销
优点:并发度最高,冲突概率最低。
缺点:管理开销最大(需维护大量锁对象)。
折中方案
优点:开销和并发性介于行锁和表锁之间。
缺点:锁粒度不精确,可能导致“假冲突”。
低并发,低开销
优点:实现简单,开销最小(只需一个锁)。
缺点:并发性能最差,成为性能瓶颈。
代表引擎MySQL InnoDBPostgreSQLOracleMicrosoft SQL Server (传统用法), SybaseMySQL MyISAM

那种锁好呢?从锁机制角度选择,应优先采用支持行级锁的存储引擎(如InnoDB)。 因为绝大多数现代应用都是“读多写少”的混合型场景,行级锁在更新操作时仅锁定必要的行,极大提升了并发查询和更新的性能,避免了表级锁在少量更新时导致整个表被锁定的性能瓶颈。虽然行级锁的管理开销略大,但相较于它带来的高并发优势,这点开销通常是值得的。表级锁(如MyISAM)仅适用于真正的只读或近乎只读(如数据仓库、报表库)的特殊场景,在需要任何并发写的Web应用或OLTP系统中已不再是最佳选择。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)