Mysql行锁失效情况分析

这篇具有很好参考价值的文章主要介绍了Mysql行锁失效情况分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

数据库版本:使用Mysql8.0.32作为测试版本,InnoDB引擎。
本文阐述Mysql行锁失效升级为表的场景。

二、测试

  • 使用远程终端打开两个数据库服务器(Linux)窗口,使用如下命令登录:
mysql -u root -p

回车,输入数据库密码.

  • 测试数据库为: test
show databases;
use test;
  • 关闭自动提交
set autocommit=0;
  • 测试数据表为:
CREATE TABLE `t_run_work_order`  (
  `id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  `work_no` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '工单编号',
  `data_guid` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '报警ID',
  `dept_id` bigint(0) NOT NULL COMMENT '组织结构ID',
  `flow_id` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '流程ID',
  `node_id` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '当前流程',
  `work_title` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '工单标题',
  `work_state` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '状态',
  `is_exception` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '是否异常',
  `is_invalid` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '是否有效',
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `version` int(0) NOT NULL DEFAULT 0 COMMENT '版本号',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `u_data_guid`(`data_guid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11903 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'XX信息表' ROW_FORMAT = Dynamic;

其中id是主键。

插入两条id分别为7742、7743的记录。

  • 对比测试:
    在左侧窗口执行:
mysql> update t_run_work_order set work_title='OTHE-L'' where id='7742';
Query OK, 1 row affected (16.49 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在右侧窗口执行:

update t_run_work_order set work_title='OTHE-R' where id='7742';

我们发现,右侧命令会阻塞。
阻塞原因:左侧命令执行后,尚未提交,锁住了id为7742的记录;
接下来,在左侧窗口执行:

commit;

观察右侧窗口,右侧窗口命令执行成功。

那么,如果我们同时对不同的记录进行操作呢?

在左侧窗口执行:

mysql> update t_run_work_order set work_title='OTHE-L'' where id='7742';
Query OK, 1 row affected (16.49 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在右侧窗口执行:

update t_run_work_order set work_title='OTHE-R' where id='7743';
Query OK, 1 row affected (12.49 sec)
Rows matched: 1  Changed: 1  Warnings: 0

我们发现,两边都执行成功,没有阻塞。
这说明:分表对不同主键的记录进行更新操作,互不影响。因为他们只是锁住了各自的记录,也就是行锁。

接下来,我们测试一下使用非索引字段作为条件进行更新操作。
在左侧窗口执行:

mysql> update t_run_work_order set work_title='OTHE-L'' where data_guid='56c24ba9-49c7-471c-b77f-a3f38043d429'';
Query OK, 1 row affected (16.49 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在右侧窗口执行:

update t_run_work_order set work_title='OTHE-R' where data_guid='56c24ba9-49c7-471c-b77f-a3f38043d428';

右侧窗口阻塞。

我们在左侧窗口执行

commit;

命令提交。然后观察右侧窗口,右侧窗口立即执行成功。
这说明了,对使用非索引字段作为条件对记录进行操作时,行锁会失效,升级为表锁,此时,其他更新、删除操作都会处于阻塞状态,直到锁释放。文章来源地址https://www.toymoban.com/news/detail-430746.html

到了这里,关于Mysql行锁失效情况分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL-01.数据库概述(基础)

    C(Chapter) 持久化(persistence): 把数据保存到可掉电式存储设备(硬盘)中以供之后使用。 大多数情况下,特别是企业应用, 数据持久化是将内存中的数据保存到硬盘上加以\\\"固化\\\", 而持久化的实现过程大多使用各种关系数据库来完成。 持久化的主要作用是将内存中的数据存到关

    2024年02月05日
    浏览(43)
  • MySQL-01数据库概述(基础)

    C(Chapter) 持久化(persistence): 把数据保存到可掉电式存储设备(硬盘)中以供之后使用。 大多数情况下,特别是企业应用, 数据持久化是将内存中的数据保存到硬盘上加以\\\"固化\\\", 而持久化的实现过程大多使用各种关系数据库来完成。 持久化的主要作用是将内存中的数据存到关

    2024年02月05日
    浏览(35)
  • 【MySQL新手到通关】第一章 数据库概述

    持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用 。大多数情况下,特别是企 业级应用, 数据持久化意味着将内存中的数据保存到硬盘上加以”固化” ,而持久化的实现过程大多 通过各种关系数据库来完成。 持久化的主要作用是 将内存中的数据存储在关

    2024年02月07日
    浏览(37)
  • Restart Study MySQL-01数据库概述(基础)

    C(Chapter) 持久化(persistence): 把数据保存到可掉电式存储设备(硬盘)中以供之后使用。 大多数情况下,特别是企业应用, 数据持久化是将内存中的数据保存到硬盘上加以\\\"固化\\\", 而持久化的实现过程大多使用各种关系数据库来完成。 持久化的主要作用是将内存中的数据存到关

    2024年02月05日
    浏览(37)
  • MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

    目前主流的关系型数据库管理系统: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。 SQL Server:Microsoft 公司推出的收费的中

    2024年02月07日
    浏览(37)
  • MySQL 基础知识(一)之数据库和 SQL 概述

    目录 1 数据库相关概念 2 数据库的结构 ​3 SQL 概要 4 SQL 的基本书写规则 1 数据库相关概念 数据库是将大量的数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合 数据库管理系统(DBMS)是用来管理数据库的计算机系统,通过使用 DBMS,多个用户可以安全、简单

    2024年02月20日
    浏览(36)
  • 数据库概述、部署MySQL服务、必备命令、密码管理、安装图形软件、SELECT语法 、筛选条件

    Top 案例1:构建MySQL服务器 案例2:密码管理 案例3:安装图形软件 案例4:筛选条件 1.1 问题 在IP地址192.168.88.50主机和192.168.88.51主机上部署mysql服务 练习必备命令的使用 1.2 方案 准备2台虚拟机,要求如下: 表-1   配置yum源、关闭selinux和防火墙,如果忘记了请自行补习前边课

    2024年02月12日
    浏览(46)
  • 数据库概述、部署MySQL服务、必备命令 、密码管理、安装图形软件、SELECT语法 、筛选条件

    目录 1 案例1:构建MySQL服务器 1.1 问题 1.2 方案 1.3 步骤 2 案例2:密码管理 2.1 问题 2.2 步骤 3 案例3:安装图形软件 3.1 问题 3.2 方案 3.3 步骤 4 案例4:筛选条件 4.1 问题 4.2 方案 4.3 步骤 1.1 问题 在IP地址192.168.88.50主机和192.168.88.51主机上部署mysql服务 练习必备命令的使用 1.2 方案

    2024年02月19日
    浏览(38)
  • Prometheus服务器、Prometheus被监控端、Grafana、监控MySQL数据库、自动发现概述、配置自动发现、Alertmanager

    目录 Prometheus概述 部署Prometheus服务器 环境说明: 配置时间 安装Prometheus服务器 添加被监控端 部署通用的监控exporter Grafana 概述 部署Grafana 展示node1的监控信息 监控MySQL数据库 配置MySQL 配置mysql exporter 配置mysql exporter 配置prometheus监控mysql 自动发现机制 概述 基于文件自动发现

    2024年02月21日
    浏览(45)
  • Mysql Docker 容器重启后数据库数据丢失分析

    项目复用nacos的mysql数据库且msyql容器已存在,之前已新建好数据库并插入数据。本次需要更新数据库表结构和数据。重启myql导致数据库数据丢失。 另外,本次事故是昨天发生未及时记录,日志不够详细。 本次需要更新数据库表结构和数据,通过dbviewer操作失败报 异常,部分

    2024年02月01日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包