当前位置: 首页 > news >正文

MYSQL事务同时修改单条记录

  • 疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。

  • 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务隔离级别 Repeatable Read 下的行为。

  • 验证

第一个事务不结束,并对message_id=40的记录进行修改

BEGIN;
UPDATE message SET message_name = '瓜瓜在哪里' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;

第二个事务同样执行,对该记录进行修改

BEGIN;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
  • 结果
    第二个事务,一直处于阻塞状态,知道我42秒将第一个事务COMMIT后,才获得锁进行修改操作。
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 1
> 时间: 42.577s
  • 结论

在多事务同时修改同一条记录的情况下,MySQL 会自动对涉及的数据行加上写锁(排他锁)。
注意:读该条记录的话不受影响。 不是事务,进行修改同一条也会阻塞。

  • 引出问题:那么自动也可以加锁的话,我怎么验证手动加锁for update是否生效,因为它不手动加锁,也会自动加锁阻止update。
  • 测试1:于是想到不结束的事务,不作修改就不会自动加锁。

第一个事务只做查询

BEGIN;
SELECT * FROM message WHERE message_id = 40;

第二个事务对该记录进行修改,查看是否阻塞

BEGIN;
SELECT * FROM message WHERE message_id = 40;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
BEGIN
> OK
> 时间: 0.016sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.02sUPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 0
> 时间: 0.016sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.018sCOMMIT
> OK
> 时间: 0.017s
  • 结论:发现不会阻塞正常修改。

  • 测试2:对查询手动加排它锁,FOR UPDATE,其他事务对该记录进行修改,查看是否阻塞。

第一个事务对查询手动加排它锁,FOR UPDATE

BEGIN;
SELECT * FROM message WHERE message_id = 40 for UPDATE;
SELECT * FROM message WHERE message_id = 40;

第二个事务对该记录进行修改

BEGIN;
SELECT * FROM message WHERE message_id = 40;
UPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40;
SELECT * FROM message WHERE message_id = 40;
COMMIT;
BEGIN
> OK
> 时间: 0.015sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.016sUPDATE message SET message_name = '瓜瓜不见了' WHERE message_id = 40
> Affected rows: 0
> 时间: 5.325sSELECT * FROM message WHERE message_id = 40
> OK
> 时间: 0.017sCOMMIT
> OK
> 时间: 0.015s
  • 结论:在修改操作是,会有阻塞现象,知道我提交了第一个事务才继续运行。

  • 补充:

    • 自动加锁和where或set的条件字段是否为索引和主键无关。
    • 自动加的锁和手动加的FOR UPDATE锁是同一种类型的锁(排它锁)。
    • 刚开始我以为自动加锁会与隔离级别有关,于是更换了READ-COMMITTED和READ-UNCOMMITTED隔离级别测试,发现事务执行update语句都会自动加锁,影响别的事务。
show variables like '%tx_isolation%';
set tx_isolation='READ-COMMITTED';
set tx_isolation='READ-UNCOMMITTED';

相关文章:

MYSQL事务同时修改单条记录

疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务…...

安装skywalking并集成到微服务项目

文章目录 一、前言二、介绍1. 架构 三、安装skywalking服务端四、启动skywalking服务端五、微服务项目开发注册中心网关服务商品服务订单服务支付服务测试 六、下载java客户端七、微服务集成skywalking客户端1. idea启动2. 命令行启动3. 集成效果4. 服务实例5. 修改服务实例名称…...

一支笔,一双手,一道力扣(Leetcode)做一宿

文章目录 一、分享自己相关的经历二、分析可能存在的问题三、根据问题进行分解或建立思维导图四、分享好用的刷题网站并进行介绍 一、分享自己相关的经历 我是一名计算机专业的学生,之前在学习算法和数据结构时,对于简单题目还算能够顺利地刷过去。但是…...

Kubernetes(K8s)从入门到精通系列之九:使用kubeadm工具快速安装K8s集群

Kubernetes K8s从入门到精通系列之九:使用kubeadm工具快速安装K8s集群 一、安装kubeadm二、修改kubeadm的默认配置三、下载K8s相关镜像四、运行kubeadm imit命令安装Master节点五、将新的Node加入集群六、安装CNI网络插件七、验证K8s集群是否工作正常八、搭建高可用K8s集群详细…...

RabbitMQ 教程 | 第11章 RabbitMQ 扩展

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...

一分钟完成centos7安装docker

action: 1、下载安装包2、安装docker 1、背景 使用CentOS / Redhat 7 版本的应该偏多。但是,Docker CE在系统中安装的时候,往往会出现一堆依赖包的报错,解决依赖包需要耗费不短的时间。 经验证,目前已找到兼容能力强的版本&am…...

NativePHP:使用PHP构建跨平台桌面应用的新框架

NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用。NativePHP具有一系列易于使用的类,一套用于构建和打包应用程序的工具以及一个静态跨平台PHP运行时。 官网地址:https://nativephp.comNati…...

删除这4个文件夹,流畅使用手机无忧

在现代社会中,手机已经成为我们生活中不可或缺的一部分。然而,随着使用时间的增长,我们可能会遇到手机卡顿和内存不足的问题,让我们感到十分困扰。手机卡顿不仅影响使用体验,还可能导致应用程序运行缓慢,甚…...

使用Bert预训练模型处理序列推荐任务

最近的工作有涉及该任务,整理一下思路以及代码细节。 流程 总体来说思路就是首先用预训练的bert模型,在训练集的序列上进行CLS任务。对序列内容(这里默认是token id的sequence)以0.3左右的概率进行随机mask,然后将相…...

将word每页页眉单独设置

在进行论文排版的时候,总是会出现页眉的页码设置问题,比如出现奇数或偶数页码一致,尝试将前面页码改掉,后面再修改前面也进行了变动,将每页页眉单独设置: (1)在第一页的最后一行输入…...

rust怎么生成随机数?

关注我,学习Rust不迷路!! 在 Rust 中,有几种不同的方法可以实现随机数生成。以下是其中几种常见的方法,以及它们的优缺点: 1. 使用 rand crate: 优点: rand crate 是 Rust 中最常…...

python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 17:50 # Author: 水兵没月 # File : excel_2_mysql建表语句.py import reimport pandas as pd import mysql.connectordb 库名mydb m…...

406 · 和大于S的最小子数组

链接:LintCode 炼码 - ChatGPT!更高效的学习体验! 题解:同向双指针 九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param nums: an array …...

xray的 webhook如何把它Hook住?^(* ̄(oo) ̄)^

xray webhook xray可以通过webhook传递扫描信息,官方文档也是一笔带过,可能大多数人都不清楚,或者仅仅知道有这么个东西,但是不知道怎么使用,webhook是xray被动监听模式下的一种输出结构和方式。相比输出Json和txt格式…...

浅析RabbitMQ死信队列

原文首发于公众号【CSJerry】 在现代分布式系统中,消息队列扮演着至关重要的角色。它们可以实现应用程序之间的异步通信,并确保数据的可靠传输和处理。而在这个领域中,RabbitMQ作为一种强大而受欢迎的消息队列解决方案,具备了高…...

ELK 企业级日志分析系统(ElasticSearch、Logstash 和 Kiabana 详解)

目录 一.ELK简介 1.1ELK的概述 1.2ELK的组成 1.2.1 ElasticSearch 1.2.2 Logstash 1.2.3 Kibana 1.2.4 小总结 1.3可以添加其他组件 1.4filebeat 结合 logstash 带来好处 1.5日志处理的步骤 二.Elasticsearch 2.1Elasticsearch概述 2.2Elasticsearch核心概念 2.2.1接近…...

数学建模—多元线性回归分析

第一部分:回归分析的介绍 定义:回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的人数就是,通过研究自变量X和因变量Y的相关关系,尝试去解释…...

win10 64位 vs2017 qt5.12.6 pcl1.9.1 vtk8.1.1配置安装步骤

由于我电脑中有 QT5.12.6 VS2017,就不介绍怎么安装了,只介绍cmake,pcl及vtk的配置步骤 为了便于后续QT的调用,以下所有安装路径中均不能出现中文及空格等 PCL自带VTK是不完整的,所以需要下载VTK源码进行重新编译使其…...

【项目 计网1】4.1 网络结构模式 4.2MAC地址、IP地址、端口

文章目录 第四章 Linux网络编程4.1 网络结构模式C/S结构(client-server)B/S结构(Browser/Server,浏览器/服务器模式) 4.2 4.3MAC地址、IP地址、端口(1)(2)MAC地址IP地址(…...

uni-app:分页实现多选功能

效果 代码解析 一、标签-列表 <view class"item_all" v-for"(item, index) in info" :key"index"><view class"position parameter-info text-over" :class"{checked_parameter: item.checked}" :data-id"i…...

节日场景下慈善钓鱼与宠物诈骗机理及闭环防御研究

摘要 节日期间公众捐赠意愿上升、宠物领养需求旺盛&#xff0c;为网络钓鱼与社交欺诈提供了高发土壤。波士顿警方发布的节日安全预警显示&#xff0c;假冒慈善机构钓鱼、虚假宠物领养与交易诈骗已成为典型高发案件&#xff0c;两类攻击均依托情感诱导、域名仿冒、社交工程与支付…...

Perplexity搜索效率提升73%的6个隐藏技巧:资深AI分析师亲测有效

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity搜索效率提升73%的底层动因解析 Perplexity 作为新一代语义优先的AI搜索引擎&#xff0c;其搜索延迟中位数从 1.84s 降至 0.50s&#xff08;实测提升 73%&#xff09;&#xff0c;这一突破并…...

别再混淆了!一文理清华为云Stack里FusionStorage、OceanStor Pacific与存储服务的对应关系

华为云Stack存储产品演进史&#xff1a;从FusionStorage到OceanStor Pacific的技术脉络解析 在云计算基础设施领域&#xff0c;存储系统的命名规则往往反映了技术架构的迭代路径。华为云Stack作为企业级混合云解决方案&#xff0c;其存储产品线经历了多次重大技术革新与品牌整合…...

从“会响”到“可靠”:给这个经典12V降5V电路加个二极管和电容,稳定性提升不止一点点

从“会响”到“可靠”&#xff1a;经典12V降5V电路的稳定性优化实战 当你在面包板上搭建好那个经典的稳压管NPN降压电路&#xff0c;看着万用表显示稳定的5V输出时&#xff0c;或许会感到一丝成就感。但当你接上负载&#xff0c;发现电压开始波动&#xff0c;或者在电源反接时闻…...

别再手动分色了!用MaterialIDsRandomGenerator插件5分钟搞定游戏模型贴图规划

游戏美术革命&#xff1a;用MaterialIDsRandomGenerator实现材质ID智能分配 在独立游戏开发中&#xff0c;一把生锈的骑士剑模型正静静躺在3dMax视口中。它的剑刃需要金属质感&#xff0c;剑柄需要皮革纹理&#xff0c;护手部分则需要复杂的雕花细节。传统工作流程中&#xff0…...

operation backup

operation & backup 运维备份&#xff08;多地&#xff09;...

基于牛顿–拉夫逊法的 IEEE 9 节点电力系统潮流计算实现与分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f381…...

深入理解STM32的PWM:从CubeMX配置到用HAL库精准控制舵机角度(以F103为例)

深入理解STM32的PWM&#xff1a;从CubeMX配置到用HAL库精准控制舵机角度&#xff08;以F103为例&#xff09; 在机器人控制、自动化设备等需要精确位置反馈的应用场景中&#xff0c;舵机的精准控制往往是项目成败的关键。许多开发者虽然能够通过PWM实现基本的0、90、180三档控制…...

【MATLAB源码-第439期】基于MATLAB的APSK与QAM高阶调制在Saleh非线性功放下BER和EVM性能对比

操作环境&#xff1a;MATLAB 2024a1、算法描述摘要 高阶数字调制技术是现代无线通信和卫星通信系统提高频谱利用率的重要方法。QAM 调制通过同相分量和正交分量的幅度组合形成二维星座&#xff0c;在较高信噪比条件下能够获得较高的信息承载能力。APSK 调制则采用多环幅相结构&…...

【独家逆向分析】:Perplexity招聘页埋点数据如何被提取?附Python自动化脚本(限24小时领取)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity薪资数据查询 Perplexity 作为一家以 AI 原生搜索和研究工具著称的科技公司&#xff0c;其薪酬结构长期未公开披露&#xff0c;但可通过多源交叉验证方式获取合理估算。目前主流可信渠道包括 Levels…...