首页 > 数据库 >【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】

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

时间:2024-11-14 18:15:11浏览次数:3  
标签:行级 加锁 间隙 索引 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以后到正无穷的数据。

标签:行级,加锁,间隙,索引,MYSQL,共享,表锁,数据,表级
From: https://blog.csdn.net/m0_64022419/article/details/143756294

相关文章

  • 【MYSQL】InoDB引擎以及MVCC多版本并发控制【详解】
    一、逻辑存储架构        一个表空间对应的一个ibd文件,里面有许多段,其中包括数据段和索引段还有回滚段,在数据存储模型中的B+树中,叶子节点就是数据段进行存储的,非叶子节点就是索引段进行存储的,回滚段里存储了undolog日志。然后里面还分为区->页->行二、架构......
  • 如何使用 MySQL Workbench 自动生成 ER 图、同步更新远程数据库 - MySQL Workbench 使
    https://zhuanlan.zhihu.com/p/438270644       ......
  • MySQL数据库innodb_fast_shutdown参数
    innodb_fast_shutdown是MySQLInnoDB存储引擎的一个配置参数,控制在关闭MySQL服务时InnoDB的关机速度和数据恢复的方式。它有三个值,分别是0、1和2,每个值的作用如下:1.innodb_fast_shutdown=0功能:关闭时不会快速退出。MySQL会执行完全的InnoDB日志回滚过程,即使没......
  • MySQL 数据库操作详解:DDL、DML、DQL 和 DCL
    MySQL数据库操作详解:DDL、DML、DQL和DCL在MySQL数据库中,数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)和数据控制语言(DCL)是四种基本的数据库操作语言。本文将详细介绍这些语言的定义、常用命令以及如何使用它们来管理和操作数据库。1.数据定义语言(DDL)定义:DDL(DataD......
  • MySQL更新操作
    1.insert语法:insertinto表名(列名1,列名2,)values(值1,值2,);语法2:一次性插入多条记录insertinto表名(列名1,列名2,)values(值1,值2,),(值1,值2,);示例:insertintodept(deptno,dname,loc)values(50,'市场部','南京');insertintodept(deptno,dname)values(60,'开发部')......
  • 科普文:软件架构数据库系列之【MySQL状态参数:open table浅析和[ERROR] Error in accept
    概叙科普文:软件架构数据库系列之【MySQL状态参数:tablecache源码浅析】-CSDN博客MySQL经常会遇到Toomanyopenfiles,MySQL上的open_files_limit和OS层面上设置的openfilelimit有什么关系?源码中也会看到不同的数据结构,TABLE,TABLE_SHARE,跟表是什么关系?MySQLflushtable......
  • Springboot连接MySQL主从集群
    一、maven依赖com.alibabadruid-spring-boot-starter<!--Mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>二、nacos配置中心配置spr......
  • mysql 导入SQL文件报错, Specified key was too long; max key length is 767 bytes
    【方案1】一、my.ini文件加入配置,然后重启mysql服务innodb_large_prefix=1二、mysql登陆运行命令登录自己的mysql的方法:1.在D:\ProgramFiles\MySQL\MySQLServer5.7\bin路径下运行命令行,2.登录:mysql-h127.0.0.1-uroot-p然后输入密码3.切换到指定数据库  use数......
  • mysql batch insert 慢的问题排查过程
    1,发现线上的queue入库很慢因为我发现2024-11-1412:24:22.897[][Thread-47]INFO com.hp.nova.runner.Task3NewStructRedisQueueRunner.run[93]:eisrq.getType()======3...............2024-11-1412:25:57.653[][Thread-47]INFO com.hp.nova.runner.Task3NewSt......
  • [Mysql基础] 表的操作
    一、创建表1.1语法CREATETABLEtable_name(field1datatype,field2datatype,field3datatype)characterset字符集collate校验规则engine存储引擎;说明:field表示列名datatype表示列的类型characterset字符集,如果没有指定字符集,则以所在数据库的字......