MySQL知识点之InnoDB中的行级锁
文 / @UTHEME
MySQL知识点之InnoDB中的行级锁
MySQL中的行锁,也称为记录锁,是通过给索引上的索引项加锁来实现的。在InnoDB中,只有当通过索引条件检索数据时,才会使用行级锁,否则将使用表锁。不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。但是即使是行锁,InnoDB里也是分成了各种类型的。
其中最常用的行锁类型是RecordLocks,也叫做记录锁。它仅仅把一条记录锁上,官方的类型名称为LOCK_REC_NOT_GAP。记录锁是有S锁和X锁之分的。当一个事务获取了一条记录的S型记录锁后,其他事务也可以继续获取该记录的S型记录锁,但不可以继续获取X型记录锁。当一个事务获取了一条记录的X型记录锁后,其他事务既不可以继续获取该记录的S型记录锁,也不可以继续获取X型记录锁。
除了记录锁之外,在InnoDB中还有GapLocks这种类型的锁。它实质上是对索引前后的间隙上锁,而不是对索引本身上锁。在一些特定的情况下,使用 GapLocks 可以解决 InnoDB 的幻读问题。但是需要注意的是,GapLocks 也可能引起死锁。当事务在第一次执行读取操作时,那些幻影记录尚不存在,我们无法给这些幻影记录加上记录锁。而 GapLocks 则可以对索引前后的间隙进行上锁,以避免幻读。
在使用行锁时,需要注意的是,不同的类型的行锁起到的功效是不同的。因此,在使用行锁时,需要根据具体的情况选择合适的锁类型,防止出现问题。

相关文章
-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02