12、MySQL锁相关知识

目录

1、全局锁和表锁使用场景

2、行锁的意义

3、为什么说间隙锁解决了快照的幻读?

4、RR隔离级别产生幻读的场景

5、详解元数据锁(MDL)作用以及如何减少元数据锁

6、出现死锁场景

7、查看MySQL锁情况

8、自增锁


1、全局锁和表锁使用场景

全局锁

  • 备份数据库:当需要对整个数据库进行一致性备份时,使用全局锁可以确保在备份过程中数据库的数据状态不会发生变化,从而保证备份数据的完整性和一致性。例如,在使用 mysqldump 工具备份数据库时,可以通过添加 --single-transaction 参数来实现一致性备份,但对于一些不支持事务的存储引擎(如 MyISAM),或者需要确保绝对一致性的场景,就可能需要使用全局锁来保证在备份期间没有其他事务对数据进行修改。

  • 进行数据库级别的操作:如执行数据库的升级、数据迁移等操作时,为了避免在操作过程中有其他事务干扰,可能需要使用全局锁来锁定整个数据库,确保操作的稳定性和正确性。比如要对数据库的存储引擎进行升级,或者将数据库从一个服务器迁移到另一个服务器时,使用全局锁可以防止在操作过程中数据被修改,保证数据的一致性和完整性。

表锁

  • 并发写入较少的场景:对于一些并发写入操作较少的表,使用表锁可以简单有效地控制对表的访问。例如,一些配置表、字典表等,这些表的数据相对稳定,很少有并发的写入操作,使用表锁可以在需要更新数据时,确保在更新过程中没有其他事务对该表进行写入操作,避免数据冲突。

  • 数据一致性要求较高的特定操作:当需要对表中的数据进行一些复杂的批量操作,并且要求操作过程中数据的一致性非常高时,表锁可以发挥作用。比如,在进行数据的批量删除、批量更新等操作时,使用表锁可以防止在操作过程中有其他事务对表中的数据进行修改,从而保证操作结果的准确性和一致性。

  • 与其他不支持行级锁的存储引擎配合:如果使用的是不支持行级锁的存储引擎(如 MyISAM),那么在需要控制并发访问时,就只能使用表锁。例如,在一些传统的日志记录系统中,可能会使用 MyISAM 存储引擎来存储日志数据,由于其不支持行级锁,在对日志表进行写入操作时,就需要使用表锁来保证数据的完整性和一致性。

  • 跨事务的表级操作:当多个事务需要对同一个表进行一系列相互关联的操作,且这些操作需要保证原子性和一致性时,表锁可以用来协调这些事务的执行。例如,在一个电商系统中,可能有多个事务需要对订单表进行插入、更新和删除操作,为了确保这些操作在整个业务逻辑中是一致的,不会出现数据不一致的情况,可以使用表锁来保证在这些操作执行期间,其他事务不会对订单表进行干扰。

全局锁和表锁在数据库管理和开发中都有各自重要的使用场景,需要根据具体的业务需求、数据访问模式和数据库的特点来合理选择和使用,以确保数据库的性能和数据的一致性。

全局锁命令

FLUSH TABLES WITH READ LOCK;
解锁
UNLOCK TABLES;

表锁命令

表读所
lock tables t14 read;
解锁执行
UNLOCK TABLES;
​
表写锁(发起线程可读写,其他线程不能写)
lock tables t14  write;
解锁执行
UNLOCK TABLES;

2、行锁的意义

MySQL5.5之前是myisam,5.6之后默认innodb存储引擎,innodb存储引擎最重要的是行锁和事务。

行锁模式:

共享锁:如果一个事务获取共享锁,其他事务还可以读取数据,但是不能修改。

排他锁:如果一个事务获取排他锁,其他事务读写都会被阻塞。

默认select不会加锁,需要手动添加

共享锁
begin
select * from t1 where a = 1 lock in share mode;
​
排他锁
select * from t1 where a = 1 for update;
​
commit

提高并发性能

  • 在高并发环境下,如果多个事务只是对表中的不同行进行操作,使用行锁可以让这些事务同时执行,而不会像表锁那样,一个事务操作表时会阻塞其他事务对整个表的访问。例如,在一个电商订单系统中,多个用户同时下单购买不同的商品,每个订单对应订单表中的不同行,使用行锁可以让这些下单操作并发执行,大大提高了系统的并发处理能力,减少了事务之间的等待时间,提升了系统的整体性能和响应速度。

保证数据一致性

  • 行锁可以确保在同一时间内,只有一个事务能够对某一行数据进行修改,从而避免了数据冲突和数据不一致的问题。比如在银行转账业务中,涉及到转出账户和转入账户余额的修改,这两个操作可能在不

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

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

相关文章

立创开发板入门ESP32C3第八课 修改AI大模型接口为deepseek3接口

#原代码用的AI模型是minimax的API接口,现在试着改成最热门的deepseek3接口。# 首先按理解所得,在main文件夹下,有minimax.c和minimax.h, 它们是这个API接口的头文件和实现文件,然后在main.c中被调用。所以我们一步步更改。 申请…

2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建

题目来源:buuctf BUU XSS COURSE 1 目录 一、打开靶机,整理信息 二、解题思路 step 1:输入框尝试一下 step 2:开始xss注入 step 3:搭建平台 step 4:利用管理员cookie访问地址 三、小结 二编&#…

第20篇:Python 开发进阶:使用Django进行Web开发详解

第20篇:使用Django进行Web开发 内容简介 在上一篇文章中,我们深入探讨了Flask框架的高级功能,并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django,另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…

操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开

报错 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开 现象 这个exe文件无法删除 解决办法 按下WinR, 找到Electronic Team Virtual Serial Port Driver Service,右击停止. 再次尝试删除,发现这个exe文件成功删除!

单值二叉树(C语言详解版)

一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…

【多表查询】

目录 一. 一对多二. 一对一 and 多对多三. 多表设计案例四. 多表查询4.1 概述4.2 内连接与外连接4.3 子查询4.4 案例 \quad 一. 一对多 \quad 删除外键 \quad 二. 一对一 and 多对多 \quad \quad 三. 多表设计案例 \quad 一个员工对应多个工作经历 \quad 四. 多表查询 \quad \q…

CentOS 7 搭建lsyncd实现文件实时同步 —— 筑梦之路

在 CentOS 7 上搭建 lsyncd(Live Syncing Daemon)以实现文件的实时同步,可以按照以下步骤进行操作。lsyncd 是一个基于 inotify 的轻量级实时同步工具,支持本地和远程同步。以下是详细的安装和配置步骤: 1. 系统准备 …

[Dialog屏幕开发] Table Control 列数据操作

阅读该篇文章之前,可先阅读下述资料 [Dialog屏幕开发] 屏幕绘制(Table Control控件)https://blog.csdn.net/Hudas/article/details/145314623?spm1001.2014.3001.5501https://blog.csdn.net/Hudas/article/details/145314623?spm1001.2014.3001.5501上篇文章我们…

Arduino大师练成手册 -- 读取DHT11

要在 Arduino 上控制 DHT11 温湿度传感器,你可以按照以下步骤进行: 硬件连接: 将 DHT11 的 VCC 引脚连接到 Arduino 的 5V 引脚。 将 DHT11 的 GND 引脚连接到 Arduino 的 GND 引脚。 将 DHT11 的 DATA 引脚连接到 Arduino 的数字引脚&am…

leetcode刷题记录(八十九)——35. 搜索插入位置

(一)问题描述 35. 搜索插入位置 - 力扣(LeetCode)35. 搜索插入位置 - 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位…

-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录

终端报错: -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录原因:由于文件行尾符不匹配导致的。当脚本文件在Windows环境中创建或编辑后,行尾符为CRLF(即回车和换行,\r\n)&#xf…

渐变颜色怎么调?

渐变颜色的调整是设计中非常重要的一部分,尤其是在创建具有视觉吸引力和深度感的设计作品时。以下是一些在不同设计软件中调整渐变颜色的详细步骤和技巧: 一、Adobe Photoshop 1. 创建渐变 打开渐变工具: 选择工具栏中的“渐变工具”&#x…

安装wxFormBuilder

1. 网址:GitHub - wxFormBuilder/wxFormBuilder: A wxWidgets GUI Builder 2. 安装MSYS2 MSYS2可以在GitHub的内容中找到,这个版本是32位64位的 3. 在程序中打开MINGW64 shell 4. 在MSYS2 MINGW64 shell中输入 pacman -Syu pacman -S ${MINGW_PACKAGE…

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上,如果你使用的是 WSL(Windows Subsystem for Linux)并安装了 Ubuntu,你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版,然后将其导入到 D 盘的目标目录。以下是详细的步骤…

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 这三个确实非常像,以至于对于初学者来说比较难理解。 总结对比 先给出对比: 特性git mergegit rebasegit cherry-pick功能合并…

DBO优化最近邻分类预测matlab

蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…

vulnhub靶场【kioptrix-3】靶机

前言 靶机:kioptrix-3,IP地址为192.168.1.74 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&a…

springboot使用ssl连接elasticsearch

使用es时ssl证书报错 unable to find valid certification path to requested target 1.依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>2…

高并发处理 --- 超卖问题+一人一单解决方案

在高并发场景下&#xff0c;超卖和一人一单是两个典型的并发问题。为了解决这两个问题&#xff0c;我们可以使用乐观锁&#xff08;CAS&#xff09;和悲观锁&#xff0c;这两者分别有不同的实现方式和适用场景。下面我们详细介绍如何通过 乐观锁&#xff08;CAS&#xff09; 和…

前端react后端java实现提交antd form表单成功即导出压缩包

前端&#xff08;React Ant Design&#xff09; 1. 创建表单&#xff1a;使用<Form>组件来创建你的表单。 2. 处理表单提交&#xff1a;在onFinish回调中发起请求到后端API&#xff0c;并处理响应。 import React from react; import { Form, Input, Button } from ant…