MySQL-数据操作类型的角度理解 S锁 X锁

news2024/11/16 22:50:21

文章目录

  • 1、S锁和S锁互相兼容
  • 2、S锁和X锁互斥
  • 3、X锁和X锁也互斥
  • 4、X锁和S锁也互斥
  • 5、select * from account for update;
  • 6、select * from account for update nowait;
  • 7、select * from account for update skip locked;

1、S锁和S锁互相兼容

在这里插入图片描述

2、S锁和X锁互斥

在这里插入图片描述

3、X锁和X锁也互斥

在这里插入图片描述

4、X锁和S锁也互斥

在这里插入图片描述

5、select * from account for update;

SELECT * FROM account FOR UPDATE; 是一个SQL语句,通常用于数据库管理系统(如Oracle, PostgreSQL, MySQL的InnoDB存储引擎等)中,用于锁定所选的行以供后续更新。

以下是这条语句的详细解释:

  1. SELECT * FROM account

    • 这部分是一个标准的SELECT语句,用于从account表中检索所有列和所有行。
  2. FOR UPDATE

    • 这是一个锁定子句,用于锁定所选的行。一旦这些行被锁定,其他事务就不能修改或删除它们,直到当前事务完成(提交或回滚)。
    • 这种锁定机制通常用于确保数据的一致性,特别是在涉及多个步骤的复杂事务中。
    • 注意:不同的数据库管理系统对FOR UPDATE的锁定行为和范围可能有不同的实现。例如,在某些系统中,它可能只锁定所查询的行(行级锁定),而在其他系统中,它可能锁定整个表(表级锁定)。

使用场景

假设你有一个在线银行系统,用户A正在尝试从他的账户中转账到用户B的账户。为了确保转账过程中账户余额的一致性,你可能需要执行以下步骤:

  1. 使用SELECT * FROM account WHERE id = A's_account_id FOR UPDATE;锁定用户A的账户。
  2. 检查用户A的账户余额是否足够进行转账。
  3. 如果余额足够,从用户A的账户中扣除相应金额,并增加用户B的账户余额。
  4. 提交事务,释放锁。

通过这种方式,你可以确保在用户A的账户被检查和更新之间,没有其他事务修改它,从而避免了潜在的数据不一致问题。

6、select * from account for update nowait;

SELECT * FROM account FOR UPDATE NOWAIT; 是一条SQL语句,通常用于数据库中的事务处理,特别是在需要锁定某些行以确保数据一致性的情况下。下面我会详细解释这条语句的每个部分:

  1. SELECT * FROM account

    • 这部分是一个标准的SELECT查询,它从account表中选择所有列(因为使用了*)。
  2. FOR UPDATE

    • FOR UPDATE是一个锁定子句,用于在事务中锁定选定的行。这意味着一旦某个事务执行了这个查询并锁定了某些行,其他尝试修改这些行的事务将被阻塞,直到第一个事务提交或回滚。
    • 这种锁定通常用于确保数据的完整性和一致性,尤其是在并发操作的环境中。
  3. NOWAIT

    • NOWAIT是一个与FOR UPDATE一起使用的选项。当指定了NOWAIT时,如果请求的行当前已被其他事务锁定,那么查询将立即返回一个错误,而不是等待其他事务释放锁。
    • 这对于不希望因为等待锁而被阻塞的应用程序来说是非常有用的。通过立即得到一个错误,应用程序可以决定如何响应(例如,重试、报告错误给用户等)。

示例场景

假设你有一个银行应用程序,两个用户(A和B)同时尝试从同一个账户(假设账户ID为123)中取款。为了避免出现“超支”的情况(即两个用户都成功取款,但账户余额不足以支付两次取款),数据库需要确保一次只有一个用户能够访问和修改该账户。

  • 用户A开始一个事务,并执行SELECT * FROM account WHERE id = 123 FOR UPDATE NOWAIT;。假设此时账户余额足够支付用户A的取款请求。
  • 在用户A的事务完成之前(即提交或回滚之前),用户B也尝试执行相同的查询。
  • 因为用户A的事务已经锁定了账户ID为123的行,并且由于使用了NOWAIT选项,所以用户B的查询将立即返回一个错误,而不是等待用户A的事务完成。
  • 用户B的应用程序可以捕获这个错误,并决定如何响应(例如,告诉用户B稍后再试)。

这样,通过使用FOR UPDATE NOWAIT,你可以确保数据的一致性和完整性,同时减少因为等待锁而导致的延迟和可能的死锁情况。
在这里插入图片描述

7、select * from account for update skip locked;

SELECT * FROM account FOR UPDATE SKIP LOCKED; 这条SQL语句在支持该语法的数据库中(如Oracle、PostgreSQL等)用于在尝试锁定表或表中的行时跳过已经被其他事务锁定的行。这允许查询快速返回一个结果集,其中只包含当前事务可以立即锁定的行,而忽略那些已被其他事务锁定的行。

这条语句通常用于高并发的数据库环境中,特别是当多个事务需要同时访问并更新相同的资源时。通过使用SKIP LOCKED选项,可以避免一个事务长时间等待另一个事务释放锁,从而提高整个系统的吞吐量和响应速度。

以下是这条语句的一些关键点:

  1. SELECT * FROM account:选择account表中的所有列。
  2. FOR UPDATE:指示数据库锁定所选的行,以便在后续的事务中更新它们。
  3. SKIP LOCKED:如果所选的行已被其他事务锁定,则跳过这些行并继续选择其他未被锁定的行。

示例场景

假设你有一个在线购物网站,并且多个用户同时尝试购买同一件商品(库存有限)。为了确保商品不会被超卖,每次购买时都需要锁定相应的库存记录并进行更新。

  • 用户A开始一个事务,并尝试锁定库存中数量大于0的商品。假设商品ID为123,当前库存为1。
  • 在用户A的事务完成之前(即提交或回滚之前),用户B也尝试购买同一件商品。
  • 由于用户A已经锁定了商品ID为123的记录,所以用户B的查询(使用FOR UPDATE SKIP LOCKED)将跳过已被锁定的记录,并继续查找其他未被锁定的商品。
  • 如果此时没有其他商品可购买,用户B的事务将不会等待用户A的事务完成,而是立即返回一个空的结果集或相应的错误消息。

通过使用FOR UPDATE SKIP LOCKED,你可以提高并发性能,避免不必要的等待,并为用户提供更快的响应速度。然而,请注意,这种机制并不能完全解决并发冲突,特别是在高并发的环境中。你可能还需要结合其他技术(如乐观锁、重试机制等)来确保数据的一致性和完整性。
在这里插入图片描述

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

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

相关文章

换天空背景的软件有哪些?摄影师必备,让背景从灰暗到绚烂

在摄影的世界里,背景往往能够为照片增添一种难以言喻的情感色彩。 有时,一个简单的天空背景更换,就能让整张照片焕发出全新的生命力,表达出摄影师想要传达的情感和故事。 如今,随着科技的发展,一些换天空…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

LLM对程序员的冲击和影响

1LLM 在软件开发过程中的单点提效 我这里罗列一些更多的可能用途: 智能代码提示代码片段智能生成SQL 语句的智能生成与调优更高效更精准的静态代码检查与自动修复(非 rule-based)智能辅助的代码评审与代码重构单元测试和接口测试代码的自动…

ARM功耗管理软件之时钟电源树

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS? 目录 一、时钟&电源树简介 二、时钟树示例 三、电源树示例 一、时钟&电源树简介 时钟门控与自…

炎黄数智人:国家体育总局冬运中心——AI裁判与教练“观君”赋能冰雪运动新篇章

在科技创新的浪潮下,国家体育总局冬季运动管理中心(以下简称“冬运中心”)揭开了人工智能在体育领域应用的新篇章。隆重宣布推出革命性的AI裁判与教练系统——“观君”,该系统将在冰雪运动项目中大放异彩,为运动员的训…

【Kaggle】Telco Customer Churn 电信用户流失预测案例

⭐️前言:案例学习说明与案例建模流程 我们将围绕Kaggle中的电信用户流失数据集(Telco Customer Churn)进行用户流失预测。在此过程中,将综合应用此前所介绍的各种方法与技巧,并在实践中提炼总结更多实用技巧。 ⭐️对…

prometheus 安装node_exporter, node_exporter 安装最新版 普罗米修思安装监控服务器client

1. 本文介绍两种安装方式,一种安装为service,使用systemctl start node_exporter管理,第二种为安装docker内 容器内使用。 1.1 安装到系统内: 1.1.1 github地址: Releases prometheus/node_exporter GitHub ​ 1.1.2 下载命…

基于移动端的助农电商系统的设计与实现08655

基于移动端的助农电商系统的设计与实现 XXX专业XX级XX班:XXX 指导教师:XXX 摘要 近年来,电子商务的快速发展引起了行业和学术界的高度关注。基于移动端的助农电商系统旨在为用户提供一个简单、高效、便捷的农产品购物体验,它不…

嵌入式以太网硬件构成与MAC、PHY芯片功能介绍

一.以太网电路基本构成 1.总体介绍 对于上述三部分,并不一定都是独立的芯片,主要有以下几种情况: CPU内部集成了MAC和PHY,难度较高; CPU内部集成MAC,PHY采用独立芯片(主流方案); CPU不集成MAC和PHY&#…

安卓应用开发学习:通过腾讯地图SDK实现定位功能

一、引言 这几天有些忙,耽误了写日志,但我的学习始终没有落下,有空我就会研究《 Android App 开发进阶与项目实战》一书中定位导航方面的内容。在我的手机上先后实现了“获取经纬度及地理位置描述信息”和“获取导航卫星信息”功能后&#x…

Zookeeper笔记1

一、介绍 Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化&#…

基于路径长度的样条插补算法(自动驾驶和路径跟踪控制适用)

以前在做车辆跟踪控制的时候发现在针对有多个X和多个Y对应的路径插补时候,总是报错,因为MATLAB里面的interp1插补函数它要求x要唯一对应一个y,当路径以单独的x或者y来求插补时候的时候就报错。由于在使用Matlab的interp1函数进行插值时&#…

暴雨来袭,陈赫家变“水帘洞”网友:赫哥滴滴打船吗?

在魔都上海,一场突如其来的暴雨 不仅让街道变成了河流,还悄悄上演了一场现实版的“水帘洞”奇遇 而这场奇遇的主角,竟然是喜剧界的明星——陈赫! 这天,乌云密布,电闪雷鸣 魔都的天空仿佛被捅了个窟窿 雨…

为什么我的Skype点数不见了?如何重新激活 Skype 点数?

您超过180天没有使用过点数打电话功能,点数暂时封存在您的账户里面,需要您手动激活(目前必须要登录网页版skype) 可再次使用。 如何重新激活 Skype 点数? 登录到你的帐户 . 选择 重新激活信用额度 .注意: …

中医药文化传承进校园活动授牌仪式在石家庄主办举办

青春闪“药”,我心向党。2024年6月30日,由河北省药品医疗器械检验研究院主办的”中医药文化传承进校园活动在石家庄主办。来自河北省各地24所学校作为示范学校现场接牌。 河北省科协科普部部长范玉鑫、河北省教育厅学位管理与研究生处副处长耿立艳、河北…

Skipfish一键扫描网站漏洞(KALI工具系列三十四)

目录 1、KALI LINUX 简介 2、Skipfish工具简介 3、信息收集 3.1 目标IP 3.2 kali的IP 4、操作步骤 4.1创建目录 4.2开始扫描 4.3 配置扫描 4.4 指定范围 4.5 查看扫描结果 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 &#xf…

基于深度学习的水果蔬菜检测识别系统(Python源码+YOLOv8+Pyqt5界面+数据集+训练代码 MX_004期)

系统演示: 基于深度学习的水果蔬菜检测识别系统 界面图: 技术组成: 深度学习模型(YOLOv8): YOLOv8是基于YOLO系列的目标检测模型,具有较快的检测速度和良好的准确率,适合于实时应用场…

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法:关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划(DP)在解决…

6.x86游戏实战-C++实现跨进程读写-通过基址读取人物状态标志位

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:5.x86游戏实战-CE定位基地址 上一个内容找出了人物状态标志位的基址&#xff0…

电脑录音软件哪个好?7款录制音频工具大盘点,赶快学起来!(2024)

也许你渴望提取你最喜欢的节目的背景音乐,或者你希望录制自己的声音制作教程。如果是这样,你就需要一款优秀的电脑录音软件,来帮助你捕捉任何你想要的声音,而且不会损失音质。目前市场上存在着大量的录制音频工具,面对…