MySQL 中的几种锁

三分恶面渣逆袭:MySQL 中的锁

                                                            MySQL 中的锁

#按锁粒度如何划分?

按锁粒度划分的话,MySQL 的锁有:

  • 表锁:开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会出现死锁。
  • 行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。
  • 页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
#按兼容性如何划分?

按兼容性划分的话,MySQL 的锁有:

  • 共享锁(S Lock),也叫读锁(read lock),相互不阻塞。
  • 排他锁(X Lock),也叫写锁(write lock),排它锁是阻塞的,在一定时间内,只有一个请求能执行写入,并阻止其它锁读取正在写入的数据。
#按加锁机制如何划分?

①、乐观锁

乐观锁基于这样的假设:冲突在系统中出现的频率较低,因此在数据库事务执行过程中,不会频繁地去锁定资源。相反,它在提交更新的时候才检查是否有其他事务已经修改了数据。

可以通过在数据表中使用版本号(Version)或时间戳(Timestamp)来实现,每次读取记录时,同时获取版本号或时间戳,更新时检查版本号或时间戳是否发生变化。

如果没有变化,则执行更新并增加版本号或更新时间戳;如果检测到冲突(即版本号或时间戳与之前读取的不同),则拒绝更新。

②、悲观锁

悲观锁假设冲突是常见的,因此在数据处理过程中,它会主动锁定数据,防止其他事务进行修改。

可以直接使用数据库的锁机制,如行锁或表锁,来锁定被访问的数据。常见的实现是 SELECT FOR UPDATE 语句,它在读取数据时就加上了锁,直到当前事务提交或回滚后才释放。

#如何解决库存超卖问题?

按照乐观锁的方式:

UPDATE inventory SET count = count - 1, version = version + 1 WHERE product_id = 1 AND version = current_version;

按照悲观锁的方式:

在事务开始时直接锁定库存记录,直到事务结束。

START TRANSACTION;
SELECT * FROM inventory WHERE product_id = 1 FOR UPDATE;
UPDATE inventory SET count = count - 1 WHERE product_id = 1;
COMMIT;

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

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

相关文章

电脑压缩软件哪个好?WinRAR、7-Zip、Bandizip 还是360压缩

文件压缩软件已成为我们日常工作中不可或缺的一部分,它不仅能够帮助我们节省存储空间,还能提高文件传输效率。本文简鹿办公小编将对四款主流的电脑压缩软件进行对比,它们分别是 WinRAR、7-Zip、Bandizip 和 360 压缩。 一、WinRAR WinRAR 是…

Qt中文个数奇数时出现问号解决

Qt中文个数奇数时出现问号解决 目录 Qt中文个数奇数时出现问号解决问题背景问题场景解决方案 问题背景 最近在开发一个小工具,涉及到一些中文注释自动打印,于是摸索如何把代码里面的中文输出到csv文件中,出现了乱码,按照网上的攻…

vue2-Django3-iframe解决方案,处理安全策略,事件拦截,处理iframe重载等

目录 简介 实现iframe 后端安全策略 通过Ngnix代理实现SAMEORIGIN iframe的事件拦截,自定义处理 iframe的状态保持(解决vue中iframe重载) 解决方法 简介 Iframe(内联框架)是一种HTML元素,用于在网页…

周鸿祎为什么建议Java、前端、大数据、PHP开发都要学一下大模型?_ai大模型全栈工程师跟java有关吗

ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。 从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料&…

智慧公厕系统实现人性化与节能化的完美结合

在当今社会,科技的飞速发展正不断改变着我们的生活方式,公厕也不例外。智慧公厕系统的出现,不仅提升了人们的使用体验,更实现了人性化与节能化的完美结合,为城市公共服务带来了全新的变革。 一、人性化,是智…

echarts 实现水利计算模型-雨量,流量,时间分割线

需求背景解决效果ISQQW代码地址index.vue 需求背景 实现水利计算模型-雨量&#xff0c;流量&#xff0c;时间分割线 解决效果 ISQQW代码地址 链接 index.vue <!--/** * author: liuk * date: 2024/06/13 * describe: 洪水预报结果图表 */--> <template><di…

算法篇 滑动窗口 leetcode 长度最小的子数组

长度最小的子数组 1. 题目描述2. 算法图分析2.1 暴力图解2.2 滑动窗口图解 3. 代码演示 1. 题目描述 2. 算法图分析 2.1 暴力图解 2.2 滑动窗口图解 3. 代码演示

数据结构进阶——使用数组实现栈和队列详解与示例(C,C#,C++)

文章目录 1、数组实现栈栈的基本操作C语言实现C#语言实现 2、 数组实现队列队列的基本操作C语言实现C# 语言实现C语言实现 总结 在编程世界中&#xff0c;数据结构是构建高效算法的基石。栈和队列作为两种基本的数据结构&#xff0c;它们的应用非常广泛。本文将带领大家使用C&a…

股票质押约定购回:机制、风险与策略!

​股票质押约定购回&#xff1a;机制、风险与策略 在复杂的金融市场中&#xff0c;股票质押约定购回作为一种常见的融资手段&#xff0c;受到了众多投资者和企业的关注。本文将深入探讨股票质押约定购回的定义、运作机制、潜在风险以及投资者和企业在操作时应采取的策略。 一、…

HackChat匿名聊天室

匿名聊天 聊天室地址 这是一款极简、无干扰的聊天应用程序&#xff0c;可以让你专注于交流而不必担心干扰. 频道通过 url 创建、加入和共享&#xff0c;通过更改问号后的文本来创建自己的频道. hack.chat 服务器上不会保留任何消息历史记录&#xff0c;链接断开消息就会删除. …

尚硅谷大数据技术-数据湖Hudi视频教程-笔记03【Hudi集成Spark】

大数据新风口&#xff1a;Hudi数据湖&#xff08;尚硅谷&Apache Hudi联合出品&#xff09; B站直达&#xff1a;https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘&#xff1a;https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

基于5个K7的多FPGA PCIE总线架构的高性能数据预处理平台

板载FPGA实时处理器&#xff1a;XCKU060-2FFVA15172个QSFP光纤接口&#xff0c;最大支持10Gbps/lane板载DMA控制器&#xff0c;能实现双向DMA高速传输支持x8 PCIE主机接口&#xff0c;系统带宽5GByte/s1个R45自适应千兆以太网口1个FMC子卡扩展接口 基于PCIE总线架构的高性能数据…

DIY系列——自制简易笔记本电脑散热器

前言&#xff1a;为什么要自制笔记本电脑散热器&#xff1f; 夏天到了&#xff0c;电脑的使用频率也在增加。尤其是笔记本电脑&#xff0c;长时间运行后很容易发热&#xff0c;影响性能和寿命。市场上有很多散热器产品&#xff0c;但价格不菲且效果参差不齐。如果你动手能力强…

【原创】springboot+mysql图书共享交流平台设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

C++11空指针类型

C11之前&#xff1a;NULL 在C程序开发中&#xff0c;为了提高程序的健壮性&#xff0c;一般会在定义指针的同时完成初始化操作&#xff0c;或者在指针的指向尚未明确的情况下&#xff0c;都会给指针初始化为NULL&#xff0c;避免产生野指针问题。C98/03 标准中&#xff0c;将一…

gihub配置ssh key

检查本地主机是否已经存在ssh key cd ~/.ssh# 是否存在id_rsa和id_rsa.pub文件&#xff0c;存在则说明已有ssh Key ls生成ssh key ssh-keygen -t rsa -C "Your emailXXX.com"一直回车即可 获取公钥内容&#xff08;id_rsa.pub&#xff09; cd ~/.ssh cat id_rsa…

子数组问题

目录 最大子数组和 环形子数组的最大和 乘积最大子数组 乘数为正数的最长子数组长度 等差数列划分 最长湍流子数组 单词拆分 环绕字符串中唯一的子字符串 声明&#xff1a;接下来主要使用动态规划来解决问题&#xff01;&#xff01;&#xff01; 最大子数组和 题目 …

优化理论——迭代方法

线性回归建模 训练&#xff0c;预测 { ( x ( i ) , y ( i ) ) } \{(x^{(i)},y^{(i)})\} {(x(i),y(i))} ⼀个训练样本&#xff0c; { ( x ( i ) , y ( i ) ) ; i 1 , ⋯ , N } \{(x^{(i)},y^{(i)});i1,\cdots ,N\} {(x(i),y(i));i1,⋯,N} 训练样本集 { ( x 1 ( i ) , x 2 ( i…

Linux 扩展硬盘容量

根分区的硬盘容量不够了需要添加容量 扩展硬盘容量前提是需要虚拟机关机才能进行以下操作 在虚拟中找到虚拟机设置 >> 点击硬盘 >> 选择扩展 >> 输入自已要扩展的大小 >> 确定 这些设置好之后&#xff0c;启动虚拟机 fdisk /dev/sda n p 三个回车…

09、java程序流程控制之一:顺序结构、分支语句(if-else结构)(经典案例以及Scanner类的使用)

java程序流程控制之一&#xff1a; Ⅰ、顺序结构&#xff1a;1、顺序结构简介&#xff1a; Ⅱ、分支语句&#xff1a;if-else1、if-else分支结构&#xff1a;其一、描述&#xff1a;其二、代码为&#xff1a;其三、截图为&#xff1a; 2、如何从键盘获取不同类型的变量&#xf…