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 语句
相关推荐
Hello.Reader8 小时前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
c萱9 小时前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
長琹9 小时前
AES加密算法详细加密步骤代码实现--身份证号码加解密系统
网络·数据库·人工智能·python·密码学
只因在人海中多看了你一眼10 小时前
B.50.10.06-NoSQL数据库与电商应用
数据库·nosql
烟雨归来10 小时前
3 个 ASM 磁盘故障案例,从故障诊断到解决方案
数据库·oracle
时序数据说10 小时前
时序数据库IoTDB的六大实用场景盘点
大数据·数据库·物联网·时序数据库·iotdb
MyFreeIT10 小时前
MySQL Function
数据库·mysql
白鹭11 小时前
MySQL主从复制进阶(GTID复制,半同步复制)
linux·运维·数据库·mysql·集群
叫我Zoe就行11 小时前
MySQL集群——主从复制
linux·数据库·学习·mysql
叫我龙翔11 小时前
MySQL】从零开始了解数据库开发 --- 表的操作
数据库·mysql·数据库开发