Mysql 锁

MySQL锁详解 全局锁:锁定数据库中所有的表。表级锁:每次曹锁锁住整张表。行级锁:每次操作锁住对应的行数据。表级锁,每次锁住的是整张表。锁定粒度较大,发生锁冲突的概率最高,并发度最低。引用在MyIsam,innodb等存储引擎中。对于表级锁,主要分为一下三类:1.表锁2.元数据(meta data lock,MDL)3.意向锁1.全局锁对整个数据库实例加锁,加锁后整个实例就处于只读状态;性能较差,数据逻辑备份时使用2.表级锁操作锁住整张表,锁定粒度大,发生锁冲突的概率高。 阅读详情

MySQL支持多种存储引擎,不同的存储引擎对应着不同的锁机制,用来适应不同的业务需求。

MySQL有三种锁:

1、表级锁:开销小、加锁快;不会出现死锁;锁定粒度大,发生锁冲突概率最高,并发度低。(MyISAM引擎,MEMORY引擎)

            表级锁适合已查询为主,只有少量按索引更新的数据的应用。

2、行级锁:开销大、加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度高。(InnoDB引擎)

            行级锁更适合有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,对并发性要求较高的应用。

3、页级锁:开销和加锁介于表级锁和行级锁之间,会出现死锁;锁定粒度也介于两者之间,并发度一般。

 

详细说一下每个引擎对应锁机制的基本使用

1、MyISAM表锁

锁兼容

 读锁(S)写锁(X)
读锁(S)兼容不兼容
写锁(X)不兼容不兼容

加写锁:lock table table_name write;

加读锁:lock table table_naem1,table_name2 read local;

释放锁:unlock tables;

 

写锁阻塞例子:

当前Session加 写锁,释放锁之前,其他Session读锁住的表,会等待锁释放后才能读。

 

读阻塞例子:

1)当前Session 加读锁后,不能读取没有锁定的表。

2)当前Session插入和更新锁定的表会报错。

3)其他Session可以更新查询未锁定的表,但不能对锁定的表进行操作。

还有一点要特别注意:

一次锁定所有用到的表,同一表在SQL中出现多次,就要通过SQL语句中相同别名锁定多少次。

 

2、InnoDB行锁

InnoDB与MyISAM不同的有两点:

1)支持事务     2)采用行级锁

 

一、事务的概述和讲解

事务的四个属性:

1)原子性:事务是一个原子操作单元,对数据修改,要不全部执行,或都不执行。

2)一致性:开始和完成时,数据必须保持一致(索引)。

3)隔离性:互相隔离,不同Session或不同事务互不影响。

4)持久性:事务后,对数据的修改时永久的

但是事务在并发中也会有相应的弊端:

1)更新数据的丢失:A、B两个事务,对同一事务进行修改,不加锁的情况,后一个Session更新会将前一个Session更新覆盖。

2)脏读:A对数据进行修改,如果不做锁处理,B拿取到的脏数据,同时进行了处理,就会产生未提交的数据依赖。

3)幻读:A以相同条件检索两次,第二次发现其他插入满足其检索条件。

 

二、InnoDB锁讲解

InnoDB 有两种行锁和两种表锁

两种行锁:

     1)排他锁(X):允许获得该锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁。

     2)共享锁  (S)   :允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。

两种表锁:

     1)意向共享锁(IS):给数据加共享锁,要先获得该表的IS锁。

     2)意向排他锁(IX):加排他锁前,要先获得该表的IX锁。

 

加行锁方式:

共享锁:Select   .........  from talbe_name   lock in share mode;

排他锁:Select  ........... from table_name for update;

 

InnoDB锁兼容性

 XIXSIS
X不兼容不兼容不兼容不兼容
IX不兼容兼容不兼容兼容
S不兼容不兼容兼容 
IS不兼容兼容兼容兼容

 

MySQL高级篇之锁 锁这个概念并不是MySQL数据库专有的,而是在多线程执行下,为了保证数据的正确性提出的。其中MySQL事务的隔离性是由锁来实现的。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时,锁机制也为实现MSQL的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。 阅读详情

相关推荐

MySQL查看锁的sql

MySQL查看锁的sql

blood_Z的博客 1万+

Mysql行锁和表锁

总体来说,加索引可以减少对数据的锁定范围,提高数据库的并发性能,减少锁表延迟。但同时也需要注意索引的选择和使用,因为不合适的索引可能会增加数据库的负担,导致性能下降。在MySQL中,默认情况下,使用的是自动锁定(autocommit)模式,即每个SQL语句都会自动提交一个事务,并释放相应的锁。以上问题涉及到了数据库基本概念、锁的工作原理、性能优化等方面,通过深入理解这些问题,可以更好地应对相关的面试考核。在MySQL中,行锁和表锁是两种常见的锁定机制,它们用于控制对数据库中行或表的并发访问。

on_the_roadZZZ的博客 5024

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 335

MySQL——锁

MySQL——锁

qq_56086076的博客 1237

VS Code ESP-IDF无法找到源文件、头文件波浪线解决

背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。

Hot_Ant的博客 1493

C51编程25-应用篇(单片机与电脑端实现wifi通讯)

单片机使用ESP-01S wifi模块与电脑端进行数据通讯。

qq_34343637的博客 1万+

MySQL 锁

详细介绍MySQL的各种锁

qq_35215728的博客 1677

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2696

MySQL锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(CPU,RAM,I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表表级锁:每次操作锁住整张表行级锁:每次操作锁住对应的行数据。

m0_70054514的博客 1157

【Python办公】剪贴板记录工具(记录文本 + 图片防重复)

本文介绍了一个用Python开发的剪贴板记录工具,能够自动记录复制过的文本和图片内容。该工具使用tkinter构建GUI界面,通过后台线程实时监控剪贴板变化,具有文本记录、图片保存(自动去重)功能。核心代码采用pyperclip访问剪贴板,PIL处理图片,hashlib计算图片哈希值实现去重。运行程序后,文本内容直接显示在界面,图片保存为PNG文件并记录路径。工具还提供清空历史记录功能,适合日常办公中需要追踪剪贴板历史的使用场景。

weixin_42636075的博客 240

Python爬虫实战:高效爬取中国版权登记数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的中国版权登记数据爬虫系统。我们将使用Playwright+Asyncio实现无头浏览器自动化,结合Redis分布式任务队列和MongoDB数据存储,打造一个能够应对反爬机制的企业级数据采集方案。文章包含完整代码实现、性能优化技巧以及法律合规建议,帮助开发者快速掌握大规模数据采集的核心技术。本文详细介绍了2024年使用Python最新技术栈构建中国版权登记数据爬虫的完整方案。基于Playwright的无头浏览器自动化。

2201_76125261的博客 1899

mysql 加写锁_MySQL中的读锁和写锁

在数据库的锁机制中介绍过,数据的锁主要用来保证数据的一致性的,数据库的锁从锁定的粒度上可以分为表级锁、行级锁和页级锁。在我的博客中重点介绍过MySQL数据库的行级锁。这篇文章主要来介绍一下MySQL数据库中的表级锁。本文提到的读锁和写锁都是MySQL数据库的MyISAM引擎支持的表锁的。而对于行级锁的共享读锁和互斥写锁请阅读MySQL中的共享锁与排他锁。我习惯在描述表锁的时候按照读写来区分,在表述...

weixin_30558777的博客 2329

【异常】Coze/扣子 Workflow 调用报 4200 错误深度解析

Coze API 的。

奶爸的编程之路,也就一周冷个三天 303

MYSQL中锁的类型以及如何排查锁

在 MySQL 数据库中,锁机制是维护数据一致性和完整性的关键要素。锁的存在确保了多个事务在并发执行时不会相互干扰,从而避免数据的混乱和不一致。在复杂的数据库环境中,了解 MySQL 中的锁类型及其排查方法显得尤为重要,因为这不仅可以帮助开发人员和数据库管理员优化数据库性能,还能有效地排除故障,提升系统的稳定性。

qq_26733517的博客 2163

大模型长对话中上下文无法承载全部历史,如何压缩或提取重点

如果说截断和滑动窗口是“硬性”压缩,那摘要生成技术就显得“软”多了,也更接近于智能化的解决方案。它的思路是:不直接丢弃历史,而是通过自然语言处理(NLP)技术,把冗长的对话记录浓缩成一段简短的摘要,保留核心信息。这样既能大幅减少token数量,又不至于丢失关键内容。这种方法通常会借助预训练模型,比如BART或T5,它们擅长从长文本中提取重点内容。

大模型大数据攻城狮的专栏 1591

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql 锁

在mysql中使用范围查询的时,如果请求共享锁或者排他锁,InnoDB会给符合条件的已有数据的索引项加锁。悲观锁对于数据库中数据的读写持悲观态度,即在整个数据处理的过程中,他会悲观的认为数据不会保持一致性,所以是会将相应的数据锁定。乐观锁对于数据库的数据的读写持乐观态度,即在整个数据处理的过程中,他会很乐观的认为数据会保持一致性,所以不加锁,而是通过数据版本记录机制实现。需要强调的一点是,InnoDB 中行级锁是基于索引实现的,临键锁只与非唯一索引列有关 ,在唯一索引列(包括主键列)上不存在临键锁。

随心 1212

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL的行锁

背景 自从过年值班就一直在公司读《 MySQL实战45讲》这本书,当时看完了MySQL的全局锁、表级锁还有行锁和间隙锁。其中的行锁和间隙锁迟迟无法理解,最近趁着有空再次阅读了一遍,并且对照了《深入浅出MySQL》,发现对MySQL锁的理解又上了一个台阶,今天就来分享一下MySQL的行锁。 行锁 MySQL的行锁又分为共享锁(S锁)和排他锁(X锁)。 一般普通的select语句,InnoDB不加任何锁,我们称之为快照读 select * from test; 通过加S锁和X锁的select语句或者插入/更

god-jiang的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL锁概述

我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突),如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。 今天就分享下MySQL相关的最全锁,希望你学习后能更好的掌握数据库锁。 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特...

zjy1211079133的博客 4315

mysql 表锁 行锁

是针对表中的行记录的锁定机制,允许事务对表中的某行记录进行独占性操作,其他事务可以同时对其他行进行操作。它会锁定被修改的行,确保其他事务不能同时修改同一行,而允许其他事务并发地修改不相关的行。例如,如果一个用户想要取消订单,数据库会锁定该用户的订单行,以确保其他事务不能同时修改同一行,这样可以避免出现订单状态同时被多个事务修改的问题。操作时,会尽可能地使用行级锁,以提高并发性能,并避免对整个表进行锁定,但具体的锁定方式和机制可能会因数据库管理系统和配置而有所不同。表,允许一个事务对整个表进行写操作。

wangZY的博客 1763

Mysql的锁原来就是这样啊

还是不懂的可以@我。

2201_75397629的博客 1528

MySQL锁,锁的到底是什么?

只要学计算机,「锁」永远是一个绕不过的话题。MySQL锁也是一样。 一句话解释MySQL锁: MySQL锁是解决资源竞争的一种方案。 短短一句话却包含了3点值得我们注意的事情: 对什么资源进行竞争? 竞争的方式(或者说情形)有哪些? 锁是如何解决竞争的? 这篇文章开始带你循序渐进地理解这几个问题。

mf97532的博客 1095

【MySQL锁篇】一、MySQL当中有哪些锁

MySQL有哪些锁

weixin_56738054的博客 3051

mysql insert是锁表还是锁行_mysql 锁表还是锁行

关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况。为什么呢?先看一下这篇文章。做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统。假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为问题就来了,当 2 个人同时来借的时候,有可能第一个人执行...

weixin_33323907的博客 4218
上一篇: Mysql 运维优化必须知道的几个命令
下一篇: WebSocket消息类型 入门篇(三)
Mark_XC
博客等级 码龄9年 16粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值