Mysql-全局锁、表锁、行锁

发布时间:2024年01月21日
本文已收录于专栏
《数据库》

全局锁

概述说明

??全局锁是是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的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]区间锁定
在这里插入图片描述

总结提升

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

在这里插入图片描述


🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯
文章来源:https://blog.csdn.net/weixin_45490198/article/details/135726509
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。