【SQL】MySQL 中主要的锁类型

在MySQL中,主要有以下几种锁类型,每种锁都有不同的特点和使用场景:

1. 共享锁 (Shared Lock, S Lock)

共享锁是一种读取锁,也称为S锁。多个事务可以同时持有共享锁,并且不会阻塞其他事务获取共享锁,但会阻塞其他事务获取排他锁(写锁)。共享锁用于确保多个事务可以同时读取同一份数据,而不会发生数据修改冲突。

  • 语法: SELECT ... LOCK IN SHARE MODE;SELECT ... FOR SHARE;
  • 特点:
    • 允许多个事务同时持有。
    • 阻塞排他锁的获取。

2. 排他锁 (Exclusive Lock, X Lock)

排他锁是一种写入锁,也称为X锁。只有一个事务可以持有排他锁,其他事务无法同时持有任何类型的锁,直到释放排他锁。排他锁用于确保在修改数据时,其他事务不能读取或修改相同数据,从而保持数据的一致性。

  • 语法: SELECT ... FOR UPDATE;UPDATE ...;DELETE ...;
  • 特点:
    • 只允许一个事务持有。
    • 阻塞其他事务的获取(共享锁和排他锁)。

3. 表级锁 (Table-level Locks)

表级锁是针对整个表的锁定,常见的表级锁有读锁和写锁。

  • 读锁 (Read Lock): 也称为表共享锁(Table Read Lock)。允许多个事务同时获取读锁,但阻塞写锁的获取。读锁适用于读取操作,不阻塞其他事务的读取操作。

  • 写锁 (Write Lock): 也称为表排他锁(Table Write Lock)。只允许一个事务获取写锁,阻塞其他事务的读锁和写锁获取。写锁适用于更新、删除等写操作,用于保证操作的原子性和一致性。

4. 行级锁 (Row-level Locks)

行级锁是针对表中的单行数据的锁定,MySQL的InnoDB存储引擎支持行级锁。行级锁可以细化到具体的数据行,减少锁的粒度,提高并发性。

  • 行共享锁 (Record Shared Lock, S Lock): 允许多个事务同时持有行共享锁,用于读取操作,不阻塞其他事务的读操作,但会阻塞其他事务的行排他锁获取。

  • 行排他锁 (Record Exclusive Lock, X Lock): 只允许一个事务持有行排他锁,用于更新或删除操作,阻塞其他事务的行共享锁和行排他锁获取。

5. 间隙锁 (Gap Locks)

间隙锁是一种特殊的锁类型,用于确保范围查询时不会有新的数据插入到查询范围内,防止幻读(Phantom Read)现象的发生。间隙锁会锁定一个范围,而不是具体的行。

  • 语法: 通常由数据库自动添加,无需显式指定。
  • 特点: 防止在范围查询之间插入新行,从而避免幻读。

总结

MySQL中的锁主要分为共享锁、排他锁、表级锁和行级锁,每种锁具有不同的粒度和作用范围,用于确保并发事务的隔离性、一致性和性能。选择合适的锁对数据库性能和并发控制至关重要,需要根据具体的业务需求和并发访问模式进行选择和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息称台积电下周开始试产 2nm 芯片,有望率先用于苹果 iPhone 17

消息称台积电下周开始试产 2nm 芯片,有望率先用于苹果 iPhone 17 💡📱 大家好,我是猫头虎,科技自媒体博主 🐱🐯,带你洞察科技世界的每一个细节!🔥 关于猫头…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

Linux学习笔记(三)文件权限

一、权限的分类 Linux权限分为r(读取)、w(写入)、x(执行)。我们在终端执行ls -l命令查看文件详细信息显示如下: [root@srv sun]# ls -l 总用量 0 drwxr-xr-x. 2 sun root 6 7月 5 14:05 公共 drwxr-xr-x. 2 sun root 6 7月 5 14:05 模板 drwxr-xr-x. 2 sun root…

netty udp创建服务端+客户端

一.udp创建服务端 /*** udp 服务器 */ Slf4j Component public class UdpServer {/*** 创建服务端*/Asyncpublic void bind(int port) {EventLoopGroup group new NioEventLoopGroup();try {Bootstrap b new Bootstrap();b.group(group).channel(NioDatagramChannel.class).…

vue 导出excel乱码问题

今天做一个导出excel的功能,导出文件显示乱码,分析接口无问题,后修改如下: 1.接口的response类型:类型设置为blob // 导出信息 export const exportInfo (data: any, config { timeout: 6000, responseType: "…

MAT(Eclipse Memory Analyzer) Windows安装

MAT(Eclipse Memory Analyzer) Windows安装 MAT(Eclipse Memory Analyzer)是一个Java的内存分析工具 MAT下载地址 安装完成之后的目录机构 如若出现java版本过低的解决办法 在配置文件MemoryAnalyzer.ini中添加指定Java的版本…

PD协议诱骗芯片,XSP08Q,XSP16应用笔记

XSP08Q是3C数码或小家电产品的Type-C接口控制芯片,它负责和PD充电器通讯,获取充电器的快充电压档位,如5V4A,9V3A,12V2A,15V3A,20V5A等等。 XSP08Q支持PD协议,BC1.2协议,Q…

从产业链视角审视工作

从产业链视角审视工作:定位、价值与成长 作为一名技术博客博主,我经常收到各种关于职业发展、技术成长和学习路径的问题。最近,我看了一份学习报告,其中提到了一种非常有趣且实用的视角——从产业链的角度去审视自己的工作。这种视…

Hash算法和MD5容易受到冲突攻击的原因

Hash算法和MD5容易受到冲突攻击的原因主要在于它们的设计缺陷和安全性问题。‌ 设计缺陷:‌如果哈希算法设计不当,‌可能会产生哈希碰撞,‌甚至导致碰撞攻击。‌哈希函数的目标是将输入数据转换成固定长度的输出,‌但如果在设计上…

Web 自动化测试主流框架都有哪些?

Web移动端自动化测试成为了现代软件开发流程中的重要环节,因此,很多主流框架被开发出来来帮助开发人员提高测试效率。本篇文章将从零到一详细介绍Web移动端自动化测试的主流框架。 一、Web移动端自动化测试框架简介 Web移动端自动化测试框架是一种开发工…

百元平价蓝牙耳机哪款好?平价高性价比蓝牙耳机推荐

随着蓝牙耳机的普及,市面上各种品牌的蓝牙耳机也层出不穷。对于那些预算在百元平价的朋友来说,百元平价蓝牙耳机哪款好?这个问题就显得格外重要了。毕竟,蓝牙耳机作为日常生活中不可或缺的小伙伴,不仅需要音质出众、续…

AD3518 SOP-8封装 单节锂电池保护芯片 可替代XB8608/XB8608A

AD3518 是一款内置 MOSFET 的单节锂电池保护芯片。该芯片具有非常低的功耗和非常低阻抗的内置 MOSFET。该芯片有充电过压,充电过流,放电过压,放电过流,过热,短路,电芯反接等各项保护等功能,确保…

7.深度学习概述

深度学习概述 1. 线性回归1.1 线性回归一般表达式1.2 线性回归内积表达方式:1.3 多个样本时,线性回归的进一步表达:1.4 线性回归方程的解析1.5 线性回归就是求loss函数的最小值 2. 如何求函数最小值2.1 一个例子2.2 求导法——求最小值2.3 求…

OCR的基本概念和开源项目介绍

深度学习和OCR OCR基本概念开源项目多模态大模型——OCR free 在当今多模态大模型横行的时代,已经没有人再去研究OCR了 OCR基本概念 OCR是目标检测类项目,但又不完全是目标检测。它是 行级语义OCR问题最有效解决方案:OCR问题: 第…

使用“nvm use 版本号“命令无效

使用"nvm use 版本号"命令无效 为什么无效?解决 为什么无效? 解决 将这个nodejs文件夹删除,然后在运行nvm use 版本号,则 node生效.

C#面:解释startup class的configure方法有什么作用?

这个⽅法来定义整个应⽤如何响应HTTP请求。它有⼏个⽐较重要的参数,application builder,Hosting environment, logo factory, 在这⾥我们可以配置⼀些中间件⽤来处理路径,验证和session等等。 startup class的configure方法是 A…

JSON Server 详细使用教程

简介 JSON Server 是一个非常实用的工具,可以让你快速搭建一个模拟 REST API。它可以基于一个 JSON 文件快速创建一个全功能的假 REST API,非常适合前端开发时做原型或 mock 数据。本文将详细介绍 JSON Server 的安装和使用方法。 安装 JSON Server 是一个 Node.js 模块,可以…

UNIAPP 使用地图 百度 高德 腾讯地图路线轨迹

这里写自定义目录标题 UNIAPP 使用地图 百度 高德 腾讯地图路线轨迹链接: [插件](https://ext.dcloud.net.cn/plugin?id18892/).路线轨迹首先需要申请开发者中心 的key值必须导入插件复制下面代码 替换KEY值申请key值以后 只需要传开始和结束的经度纬度即可** UNIAPP 使用地图…

FastAPI 学习之路(三十四)数据库多表操作

之前我们分享的是基于单个表的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计 class User(Base):__tablename__ "users"id Column(Integer, primary_keyTrue, indexTrue)email Column(String(10), uniqueTr…

网络基础——udp协议

UDP协议(User Datagram Protocol,用户数据报协议)是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。以下是关于…