MySQL中的共享锁和排他锁

MySQL 中的锁可以从多个维度进行分类,其中从模式上可以分为共享锁(Shared Lock,S Lock)和 排他锁(Exclusive Lock,X Lock)。

共享锁(Shared Lock,S Lock)

共享锁,也被称为读锁(Read Lock),共享锁保证了数据的共享读特性。

  • 允许多个事务同时对同一数据资源进行读取操作,即多个事务可以同时持有相同的共享锁,并发读取数据
  • 阻塞排他锁,即如果一个事务已经持有了共享锁,其他事务如果要获取排他锁,则需要等待共享锁释放。其实就是不允许任何事务对数据进行修改(因为修改数据要先加排它锁)
共享锁的加锁方式
  1. SELECT ... LOCK IN SHARE MODE
  2. SELECT ... FOR SHARE(MySQL 8.0 及以上版本)

排他锁(Exclusive Lock,X Lock)

  • 只能有一个事务持有排他锁,其他事务无法获取同样的记录上的排他锁。即只允许一个事务修改或删除某一行数据
  • 阻塞排他锁和共享锁,即如果一个事务已经持有了排他锁,其他事务无法获取共享锁或排他锁,其实就是不允许其他事务对该行数据进行加锁读取或修改(注意只是不能加共享锁或排他锁读取,但正常查询是快照读,这是可以的)
排它锁的加锁方式
  1. SELECT ... FOR UPDATE
  2. UPDATE语句
  3. DELETE 语句
相关推荐
RainbowSea8 分钟前
7. MySQL 当中的 InnoDB 数据存储结构(详解)
java·sql·mysql
烧瓶里的西瓜皮30 分钟前
Go语言从零构建SQL数据库(6) - sql解析器(番外)- *号的处理
数据库·sql·golang
TDengine (老段)31 分钟前
TDengine.C/C++ 连接器
大数据·c语言·数据库·c++·时序数据库·tdengine·iotdb
TDengine (老段)36 分钟前
TDengine 3.3.6.0 版本中非常实用的 Cols 函数
大数据·数据库·物联网·时序数据库·tdengine·iotdb
maybe020939 分钟前
使用 node.js 和 MongoDB 编写一个简单的增删改接口 demo
前端·数据库·mongodb·node.js
编码小笨猪39 分钟前
[ Redis ] | 初识Redis
数据库·redis·缓存
关山月1 小时前
设计 MySQL 表的 14 条原则
mysql
weixin_550839791 小时前
GPU视频编解码:X86 DeepStream 视频编解码入门(三)
数据库·sqlserver·视频编解码
firepation1 小时前
基于 springboot 的在线考试系统
java·spring boot·mysql·源码·课程设计
电星托马斯1 小时前
Linux的那些基础常用命令汇总
linux·运维·服务器·数据库·笔记·centos·debian