当前位置:网站首页 > 数据科学与大数据 > 正文

数据库锁表如何解锁(数据库锁表解锁语句)



技术社群的这篇文章《MySQL 核心模块揭秘 | 35 期 | 主键索引等值查询加什么锁?》给我们讲解了MySQL主键索引等值查询的锁类型,其中确认锁的相关操作可以在日常工作中用到,例如data_locks视图的用法,学习了解下。

创建测试表,

插入测试数据,

将事务隔离级别设置为 REPEATABLE-READ(如已设置,忽略此步骤),

执行以下 select 语句,

查看加锁情况,

lock_data = 10, lock_mode = S,REC_NOT_GAP 表示对主键索引中 <id = 10> 的记录加了共享普通记录锁。

可重复读隔离级别下,

  • 对于 select 语句中 where 条件覆盖范围内的记录,默认加共享 Next-Key 锁。
  • 对于 update、delete 语句中 where 条件覆盖范围内的记录,默认加排他 Next-Key 锁。

上面的 select 语句却对 <id = 10> 的记录加了共享普通记录锁,这是为什么呢?

这就要从可重复读隔离级别的特点说起了。可重复读隔离级别下,同一个事务多次执行同一条 select 语句能够读取到数量和内容都完全相同的记录。

可重复读隔离级别下,对 where 条件覆盖范围内的记录默认加 Next-Key 锁,既锁住索引记录本身,防止其它事务修改或者删除记录,又锁定索引记录前面的间隙,防止其它事务往间隙中插入记录。

示例 SQL 的 where 条件中只包含主键索引字段,主键索引的唯一约束能够保证:只要不删除表中 <id = 10> 的记录,就不会再有其它 <id = 10> 的记录插入到主键索引中。

这种情况下,只需要对 select 语句中 where 条件对应的这条记录加普通记录锁,防止其它事务修改这条记录,就能保证可重复读。

将事务隔离级别设置为 READ-COMMITTED(如已设置,忽略此步骤),

执行以下 select 语句,

查看加锁情况,

lock_data = 10, lock_mode = S,REC_NOT_GAP 表示对主键索引中 <id = 10> 的记录加了共享普通记录锁。

读已提交隔离级别下,

  • 对于 select 语句中 where 条件覆盖范围内的记录,默认加共享普通记录锁。
  • 对于 update、delete 语句中 where 条件覆盖范围内的记录,默认加排他普通记录锁。

示例 SQL 执行过程中,对主键索引中 <id = 10> 的记录加共享普通记录锁,属于默认情况,不需要其它解释了。

从上述测试,可重复读、读已提交两种隔离级别下,对主键索引字段进行等值查询,虽然都对记录加了共享普通记录锁,但是它们的加锁逻辑是不一样的。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"

到此这篇数据库锁表如何解锁(数据库锁表解锁语句)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 大数据算法有哪几种(大数据算法有哪几种模型)2025-04-04 14:09:06
  • 数据库课程设计选题(数据库课程设计选题要求)2025-04-04 14:09:06
  • 数据库oracle安装步骤(oracle数据库安装视频教程)2025-04-04 14:09:06
  • 数据库课程设计图书管理系统(数据库课程设计图书管理系统代码)2025-04-04 14:09:06
  • u盘启动盘制作制作后需要安装系统吗(u盘制作启动盘后可以存储数据吗)2025-04-04 14:09:06
  • springboot数据库密码动态配置(spring boot数据库用户名和密码加密)2025-04-04 14:09:06
  • 单链表 逆序(单链表逆序输出数据结构)2025-04-04 14:09:06
  • orecal数据库招标(orcale数据库价格)2025-04-04 14:09:06
  • 数据库语句增删改查(数据库增删改查语句大全)2025-04-04 14:09:06
  • 小米手机数据迁移到红米手机怎么操作(红米手机 数据迁移)2025-04-04 14:09:06
  • 全屏图片