iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >Mysql表锁与行锁
  • 151
分享到

Mysql表锁与行锁

mysql数据库 2023-09-09 16:09:03 151人浏览 薄情痞子
摘要

Mysql锁实战 前言:什么是锁一:全局锁1.1 概念1.2 作用1.3 使用1.4 特点 二:表级锁2.1 概念2.2 分类2.2.1 表锁2.2.2 元数据锁 MDL2.2.3 意向锁

Mysql实战

前言:什么是锁

  • 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是
  • 一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂

一:全局锁

1.1 概念

  • 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。
  • 其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

1.2 作用

在这里插入图片描述
全库备份的时候,表是一个一个进行备份的,如果整体的数据库未被锁住,业务系统仍然在进行写入数据,由于有的表已经备份万比例,其余的表则会发生数据不一致的问题。

1.3 使用

  • 加锁:flush tables with read lock
  • 解锁:unlock tables

1.4 特点

数据库中加全局锁,是一个比较重的操作,存在以下问题:

  1. 如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆。
  2. 如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。
    解决方式:
    在InnoDB引擎中,我们可以在备份时加上参数-single-transaction参数来完成不加锁的一致性数据备份

二:表级锁

2.1 概念

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。

2.2 分类

2.2.1 表锁

对于表锁,分为两类:

  1. 表共享读锁(read lock)
    加上读锁之后,所有得客户端都只能读表数据不能修改表数据。
    加锁:lock tables 表名… read/write、释放锁:unlock tables/客户端断开连接
  2. 表独占写锁(write lock)
    加上写锁之后,其他客户端不能读,不能写。当前客户端可以读、写

2.2.2 元数据锁 MDL

  • MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。
  • MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。
  • 为了避免DML与DDL冲突,保证读写的正确性。
    备注:
    DDL:数据定义语言
    DML:数据操作语言
    DQL:数据查询语言
    DCL:数据控制语言

2.2.3 意向锁

为了避免DML在执行时,加的行锁与表锁的冲突,在IoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
意向锁分为以下两种:

  1. 意向共享锁(IS):与表锁共享锁(read)兼容,与表锁排它锁(write)互斥。由语句select…lock in share mode添加。
  2. 意向排他锁(IX):与表锁共享锁(read)及排它锁(write)都互斥。意向锁之间不会互斥。由insert、.update、delete、select…for update添加。

三:行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最纸,并发度最高。应用在InnoDB存储引擎中。
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。
行级锁主要分为以下三类:

3.1 行锁(Record Lock)

锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持
在这里插入图片描述

  • 加锁规则
    在这里插入图片描述

3.2 间隙锁(Gap Lock)

锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。

3.3 临键锁(Next-Key Lock):

行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

四:锁总结

本文介绍了mysql中的锁机制,并讨论了全局锁、表级锁和行级锁的概念、使用方法和特点。

  • 全局锁是对整个数据库实例加锁,常用于全库的逻辑备份,以获取一致性视图,保证数据的完整性。然而,全局锁会导致数据库的写操作和同步过程受阻,因此备份期间可能需要停止业务系统或导致主从延迟。解决方式是在InnoDB引擎中使用参数-single-transaction来完成不加锁的一致性数据备份。

  • 表级锁是每次操作锁住整张表,适用于MyISAM、InnoDB、BDB等存储引擎。表级锁分为表共享读锁和表独占写锁,分别控制对表的读和写操作。此外,Mysql还引入了元数据锁(MDL),用于维护表元数据的一致性,避免DML和DDL冲突。

  • 行级锁是每次操作锁住对应的行数据,适用于InnoDB存储引擎。行级锁通过对索引项加锁来实现,分为行锁、间隙锁和临键锁。行锁用于锁定单个行记录,防止其他事务对该行进行修改或删除。间隙锁用于锁定索引记录间隙,防止其他事务在间隙中插入数据,从而避免幻读问题。临键锁是行锁和间隙锁的组合,同时锁定数据行和数据前面的间隙。

综上所述,锁在数据库中起到保证数据并发访问一致性和有效性的重要作用。不同级别的锁机制适用于不同的场景,开发人员需要根据实际情况选择合适的锁策略以提高数据库的并发性能。

来源地址:https://blog.csdn.net/hlzdbk/article/details/131779296

您可能感兴趣的文档:

--结束END--

本文标题: Mysql表锁与行锁

本文链接: https://www.lsjlt.com/news/401703.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql表锁与行锁
    Mysql锁实战 前言:什么是锁一:全局锁1.1 概念1.2 作用1.3 使用1.4 特点 二:表级锁2.1 概念2.2 分类2.2.1 表锁2.2.2 元数据锁 MDL2.2.3 意向锁...
    99+
    2023-09-09
    mysql 数据库
  • MySQL锁机制详解-表锁与行锁
    文章目录 1. 数据库锁理论2. 锁的分类2.1 按数据操作的类型分类2.2 按数据操作的颗粒度分类 3. 表锁的应用3.1 表锁相关命令3.2 给表加表共享读锁3.3 给表加表独占写锁...
    99+
    2023-09-11
    mysql 数据库
  • MySQL中的锁(表锁、行锁)
    锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数...
    99+
    2023-09-02
    java 算法 数据库
  • Mysql锁机制之行锁、表锁、死锁的实现
    目录一、Mysql锁是什么?锁有哪些类别?二、行锁和表锁的区别三、InnoDB死锁概念和死锁案例死锁场景一之select for update:死锁场景二之两个update...
    99+
    2024-04-02
  • 如何理解MySQL行锁、表锁、间隙锁
    本篇内容介绍了“如何理解MySQL行锁、表锁、间隙锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备工作...
    99+
    2024-04-02
  • Mysql锁机制中行锁、表锁、死锁如何实现
    这篇文章主要介绍了Mysql锁机制中行锁、表锁、死锁如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Mysql锁是什么?锁有哪些类别?锁定义:  ...
    99+
    2023-06-29
  • mysql行锁和表锁怎么使用
    MySQL中的行锁和表锁是用来控制并发访问数据库的机制,可以防止多个用户同时修改同一行或同一表的数据,保证数据的一致性和完整性。1....
    99+
    2023-09-11
    mysql
  • MySQL表锁、行锁、排它锁及共享锁怎么使用
    这篇文章主要介绍“MySQL表锁、行锁、排它锁及共享锁怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL表锁、行锁、排它锁及共享锁怎么使用”文章能帮助大家解决问题。一、事务隔离机制的选...
    99+
    2023-06-29
  • 如何理解MYSQL 解锁与锁表
    如何理解MYSQL 解锁与锁表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 解锁第一种show processl...
    99+
    2024-04-02
  • mysql表锁和行锁区别是什么
    小编给大家分享一下mysql表锁和行锁区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、表锁特点:偏向MyISAM存储...
    99+
    2024-04-02
  • mysql表锁和行锁有哪些区别
    小编给大家分享一下mysql表锁和行锁有哪些区别,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! Mysql有很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁;这...
    99+
    2024-04-02
  • MySQL中表锁,行锁,共享锁,排它锁,间隙锁的示例分析
    小编给大家分享一下MySQL中表锁,行锁,共享锁,排它锁,间隙锁的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!锁,在现...
    99+
    2024-04-02
  • MySQL表锁、行锁、排它锁及共享锁的使用详解
    目录前言一、事务隔离机制的选择二、表级锁&行级锁三、排它锁(Exclusive)和共享锁(Shared)1. 测试不同事务之间排它锁和共享锁的兼容性2. 测试行锁加在索引项上...
    99+
    2024-04-02
  • MySQL的表级锁,行级锁,排它锁和共享锁是什么
    这篇文章主要介绍“MySQL的表级锁,行级锁,排它锁和共享锁是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL的表级锁,行级锁,排它锁和共享锁是什么”文章能帮助大家解决问题。前言先说下事...
    99+
    2023-07-02
  • 【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?
    文章目录 前言哪些场景会造成行锁升表锁?如何避免如何分析排查查看`InnoDB_row_lock%`相关变量查看 `INFORMATION_SCHEMA`系统库 总结最后 前言 在上文我们曾小小的提到过,在索引失效的情况下...
    99+
    2023-08-18
    数据库 大数据 mysql 行锁升表锁 java
  • MySql的行级锁和表级锁是怎样的
    MySql的行级锁和表级锁是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 MySql 行级锁 表级锁如何保...
    99+
    2024-04-02
  • mysql锁表怎么解锁
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-30
  • MySQL使用表锁和行锁的场景详解
    目录前言全局锁表级锁表锁元数据锁意向锁行级锁总结前言 MySQL Innodb 的锁可以说是执行引擎的并发基础了,有了锁才能保证数据的一致性。众所周知,我们都知道 Innodb 有全...
    99+
    2024-04-02
  • Mysql加锁流程详解&MySQL 啥时候用表锁,啥时候用行锁?
    文章目录 Mysql加锁流程详解前言一、锁的内存结构二、加锁流程1、加锁的基本流程2、根据主键加锁3、根据二级索引加锁4、根据非索引字段查询加锁 5、加锁规律三、影响锁的因素四、锁信息查...
    99+
    2023-09-16
    数据库 MySQL 加锁流程 行锁 表锁
  • mysql锁表解锁的方法
    这篇文章主要介绍了mysql锁表解锁的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。什么是MySQL锁表?为了给高并发情况下的mysql进行...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作