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

【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】

目录

一、全局锁

二、表级锁

        1.表锁

        2.元数据锁

        3.意向锁

三、行级锁

       1. 行锁

        2.间隙锁

        3.临建锁


锁是处理并发情况下,对数据的一致性的关键因素,也是并发情况下对效率影响非常大的。

1、全局锁:锁定表中所有数据。

2、表级锁:锁定整张数据库表。

3、行级锁:对某行数据进行锁定。

一、全局锁

        对数据库所有实例进行加锁,也就是整个数据库所有表进行加锁。一般在备份的时候,进行加全局锁,这样就会让备份的数据与当时数据库的数据一致,DML DDL操作无法访问只能DQL操作。

        加全局锁的语法:flush tables with read lock;

        解全局锁的语法:unlock tables;

        优化备份

二、表级锁

        1.表锁

                使用的语法

                        加锁:lock tables 表名... read/write

                        解锁:unlock tables 

                1.表共享读锁

                        共享读锁就是只能进行读操作,不能进行写操作。                      

                2.表共享写锁
                        共享写锁当前客户端可以进行读写操作,但是其他客户端不能进行读写操作。

        2.元数据锁

                是系统自动控制的,不需要显示使用,访问一张表的时候会进行自动加锁。避免DDL和DML冲突,保证读写的正确性。意思就是在表中开始事务的时候,不许对表的结构进行更改。

        对数据更改的时候会加上一个排他锁,与其他锁是互斥的。元数据共享读锁和元数据共享写锁之间是兼容的。

        3.意向锁

        如果加表锁的时候,如果有行锁那么会出现冲突,所以再加表锁的时候每行进行检查是否有行级锁,但如果有意向锁,那么直接检查意向锁是否与表锁兼容,如果兼容直接加锁,如果不兼容就不允许加。 

        意向共享锁与表锁的共享锁(read)兼容,与表锁的排他锁(write)互斥;

        意向排他锁与表锁的共享锁与排他锁都互斥。

        意向锁直接不回互斥。

三、行级锁

       1. 行锁

                防止其他事务对此数据进行update和delete,RC(读已提交),RR(可重复读)事务情况都支持。

                1.共享锁(S)

                        允许一个事务读一行,阻止其他事务获得相同数据集的排他锁。

                2.排他锁(X)

                        允许数据更新,但是阻止其他事务获取相同数据集的排他锁和共享锁。

加锁方式,一般用索引进行加锁,如果没有索引那么行锁的加锁方式会升级成表锁!

        2.间隙锁

                只锁数据的间隙,而不锁数据本身,防止插入数据的时候产生幻读,在RR情况下支持。

                索引上进行等值查询唯一索引,如果给不存的记录加锁时,优化为间隙锁,比如给两条记录中间的值加锁,此时给这个间隙加上了间隙锁。

                如果使用的是非唯一索引,加锁进行等值匹配的时候会将该值的前后都加上间隙锁,因为非唯一索引插入可能会插入相同的值 在前后,为了避免这种情况就可以这样加间隙锁。

        3.临建锁

                是行锁和间隙锁的组合,在RR情况下支持。

                在唯一索引下比如有个索引19,后面有一个25,我通过>19条件进行判断加锁,那么此时就会锁住19 25及19之间的还要25以后到正无穷的数据。


http://www.kler.cn/a/399263.html

相关文章:

  • vue使用List.reduce实现统计
  • MongoDB在现代Web开发中的应用
  • java数据类型之间的转换|超详解
  • Educational Codeforces Round 164 (Rated for Div. 2)(A~E)
  • Linux(CentOS)安装达梦数据库 dm8
  • 微信小程序设置屏幕安全距离
  • STL关联式容器介绍
  • 预处理(1)(手绘)
  • 【Axure原型分享】轮播表格_开始暂停效果
  • 基于语法树的SQL自动改写工具开发系列(2)-使用PYTHON进行简单SQL改写的开发实战
  • LeetCode题解:18.四数之和【Python题解超详细】,三数之和 vs. 四数之和
  • redis类型介绍
  • docker .vhdx文件压缩
  • Linux性能优化之火焰图简介
  • Failed to create a temp file - Jenkins 无法创建任务
  • SpringCloud篇(服务保护 - Sentinel)
  • [C++] 惯用法
  • 【windows笔记】04-windows下设置端口转发规则(局域网组网实用)
  • 优选算法 - 5 ( 栈 队列 + 宽搜 优先级队列 9000 字详解 )
  • Windows下 TortoiseGit 的使用
  • Python绘制雪花
  • 2.STM32之通信接口《精讲》之USART通信
  • 执行flink sql连接clickhouse库
  • 《线性代数》学习笔记
  • 一个功能强大的文档解析和转换工具,支持PDF、DOCX、PPTX和Markdown等
  • 常用命令之LinuxOracleHivePython