Mysql-全局锁、表锁、行锁

本文已收录于专栏
《数据库》

全局锁

概述说明

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

开启方式

加全局锁的方式:FLUSH TABLES WITH READ LOCK;   释放全局锁:UNLOCK TABLES

应用场景

  常用于执行一些需要对整个数据库进行操作的任务,比如备份、恢复和复制等。

表锁

概念说明

  表锁是指锁定整个表,当一个事务对表进行写操作时,其他事务无法对该表进行任何读写操作,直到该事务释放锁。表锁会限制并发访问,但可以减少锁的开销。

实现方式

意向锁

  意向锁:意向锁是⼀个表级锁,它解决的是表锁和⾏锁共存的问题。当我们需要给⼀个表加表锁的时候,我们需要根据去判断表中有没有数据⾏被锁定,以确定是否能加成
功。假如没有意向锁,那么我们就得遍历表中所有数据⾏来判断有没有⾏锁;有了意向锁这个表级锁之后,则我们直接判断⼀次就知道表中是否有数据⾏被锁定了。

  例如:要执⾏的事务 A 在申请⾏锁(写锁)之前,数据库会⾃动先给事务 A 申请表的意向排他锁。当事务 B 去申请表的互斥锁时就会失败,因为表上有意向排他锁之后事务 B 申请表的互斥锁时会被阻塞。

开启方式

      写锁:LOCK TABLES 表名 WRITE;    
      读锁:LOCK TABLES 表名 READ;

行锁

概念说明

  行锁是指锁定表中的某一行,当一个事务对某一行进行写操作时,其他事务无法对该行进行写操作,但可以进行读操作。行锁可以提高并发访问,但可能会增加锁的开销。

实现方式

记录锁:

  使用唯一索引进行等值查询的时候精确匹配到一条数据,此时就会对这条记录进行锁定
  例如:select * from t where id =6 for update;
在这里插入图片描述

间隙锁

  间隙锁指的是两个记录之间逻辑上没有填⼊数据的部分,是⼀个左开右开区域。
  例如:select * from t where id =3 for update; 或者 select * from t where id > 1 and id < 6 for update; 就会将(1,6)区间锁定。
在这里插入图片描述

临键锁

  临键锁是间隙加上它右边的记录组成的左开右闭区间。mysql 默认⾏锁类型就是 临 键 锁(Next-Key Locks) 。当使⽤唯⼀性索引,等值查询匹配到⼀条记录的时候,临键锁(Next-Key Locks)会退化成记录锁;没有匹配到任何记录的时候,退化成间隙锁。
  例如:select * from t where id > 1 and id <= 6 for update; 就会将(1,6]区间锁定
在这里插入图片描述

总结提升

  在实际应用中,需要根据实际需求选择合适的锁定方式,以提高数据库的性能和并发能力,并确保数据的一致性。

在这里插入图片描述


🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯

相关推荐

  1. mysql

    2024-01-25 18:16:03       36 阅读
  2. MySQL

    2024-01-25 18:16:03       15 阅读
  3. MySQLMySQL(二)测试

    2024-01-25 18:16:03       23 阅读
  4. MySQL中的,,排它,共享

    2024-01-25 18:16:03       32 阅读
  5. MySql解决方案

    2024-01-25 18:16:03       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-25 18:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-25 18:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-25 18:16:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-25 18:16:03       20 阅读

热门阅读

  1. leetcode-200-岛屿问题

    2024-01-25 18:16:03       40 阅读
  2. Vue3生命周期和Vue2生命周期对比

    2024-01-25 18:16:03       39 阅读
  3. C语言之初级指针

    2024-01-25 18:16:03       37 阅读
  4. python ast 解析enum为C头文件

    2024-01-25 18:16:03       34 阅读
  5. doris安装文档翻译-标准部署(Standard deployment)

    2024-01-25 18:16:03       32 阅读
  6. webpack笔记

    2024-01-25 18:16:03       34 阅读
  7. 网络安全产品之认识漏洞扫描设备

    2024-01-25 18:16:03       43 阅读
  8. LeetCode 2765. 最长交替子数组

    2024-01-25 18:16:03       43 阅读
  9. ChatGPT在车联网的应用创新浅谈

    2024-01-25 18:16:03       37 阅读
  10. GPT帮我快速解决工作上的问题案例

    2024-01-25 18:16:03       36 阅读