mysql 锁

作者: Sunlightotaku | 来源:发表于2023-02-27 21:31 被阅读0次

mysql锁从大方向分为全局锁,表级锁和行锁,这篇文章我们主要讲行锁。

首先,我们需要明确,行锁是innodb引擎特有的,这也是innodb很厉害的一点。

行锁的类型有四种,记录锁,间隙锁,临建锁,插入意向锁

在讲这四种行锁之前,我们需要明确它们的基础,也就是共享锁和排他锁,我们把这两种称为锁的模式

    共享锁(S锁):select lock in share mode,满足读读共享,读写互斥

    排它锁(X锁):select for update ; update, insert ,delete,满足写写互斥、读写互斥

下图是这两种锁模式的兼容情况

现在回到四种行级锁:

1.记录锁(Record Lock):锁住的是一条记录

2.间隙锁(Gap Lock):只存在于可重复读隔离级别,目的是为了解决可重复读隔离级别下幻读的现象,限制一个区间在间隙锁加锁的情况下不能插入数据,如(3,5),那么锁期间4就无法被插入

产生间隙锁的条件(RR事务隔离级别下;):

    使用普通索引锁定;

    使用多列唯一索引;

    使用唯一索引锁定多行记录。

间隙锁设置:

  首先查看 innodb_locks_unsafe_for_binlog 是否禁用:show variables like 'innodb_locks_unsafe_for_binlog';

  查看结果:innodb_locks_unsafe_for_binlog:默认值为OFF,即启用间隙锁。

  因为此参数是只读模式,如果想要禁用间隙锁,需要修改 my.cnf(windows是my.ini) 重新启动才行。    

   # 在 my.cnf 里面的[mysqld]添加

   [mysqld]

    innodb_locks_unsafe_for_binlog = 1

  具体事例分析:https://zhuanlan.zhihu.com/p/48269420

3.临建索(Next-Key Lock):目的也是为了解决幻读,是记录锁和行级锁的组合,既可以限制一个区间不能插入数据,还可以限制某行记录不能被修改,如(3,5],那么4无法插入,且5这条记录不能被修改

4.插入意向锁:一个事务在插入一条记录的时候,需要判断插入位置是否已被其他事务加了间隙锁(next-key lock 也包含间隙锁)。如果有的话,插入操作就会发生阻塞,直到拥有间隙锁的那个事务提交为止(释放间隙锁的时刻),在此期间会生成一个插入意向锁,表明有事务想在某个区间插入新记录,但是现在处于等待状态。

参考资料:https://xiaolincoding.com/mysql/lock/mysql_lock.html#%E5%85%A8%E5%B1%80%E9%94%81

相关文章

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • MySQL二进制日志

    MySQL-day10 MySQL存储引擎-锁 1)什么是“锁”? 2)“锁”的作用是什么? 3)MySQL中的锁...

  • MySQL的锁机制

    mysql的锁机制 1、MySQL锁的基本介绍 MyISAM:MySQL的表级锁有两种模式:表共享读锁(Table...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • Mysql 之 锁表与解表

    Mysql 之 锁表与解表 Mysql 查看锁表语句 mysql>show open tables where i...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

  • (4)头条mysql

    1、MySQL有哪些锁,乐观锁和悲观锁实现 如果避免、减少锁等待、团队中如何监控MySQL的锁等待的情况 锁监控:...

  • MySQL锁篇

    1 MySQL锁介绍 2 MySQL表级锁 2.1 表级锁介绍 ​ 表级锁由SQL layer实现。M...

网友评论

      本文标题:mysql 锁

      本文链接:https://www.haomeiwen.com/subject/hlxkldtx.html