美文网首页
mysql 的锁以及间隙锁

mysql 的锁以及间隙锁

作者: 放开那个BUG | 来源:发表于2021-07-10 22:40 被阅读0次

1、mysql 的锁

mysql 为并发事务同时对一条记录进行读写时,提出了两种解决方案:
1)使用 mvcc 的方法,实现多事务的并发读写,但是这种读只是“快照读”,一般读的是历史版本数据,还有一种是“当前读”,一般加锁实现“当前读”,或者 insert、update、delete 也是当前读。
2)使用加锁的方法,锁分为共享锁(读锁),排他锁(写锁)

快照读:就是select

  • select * from table ….;

当前读:特殊的读操作,插入/更新/删除操作,属于当前读,处理的都是当前的数据,需要加锁。

  • select * from table where ? lock in share mode;
  • select * from table where ? for update;
  • insert;
  • update ;
  • delete;

mysql 在 RR 级别怎么处理幻读的呢?一般来说,RR 级别通过 mvcc 机制,保证读到低于后面事务的数据。但是 select for update 不会触发 mvcc,它是当前读。如果后面事务插入数据并提交,那么在 RR 级别就会读到插入的数据。所以,mysql 使用 行锁 + gap 锁(简称 next-key 锁)来防止当前读的时候插入。

2、间隙锁

Gap Lock在InnoDB的唯一作用就是防止其他事务的插入操作,以此防止幻读的发生。

Innodb自动使用间隙锁的条件:

  • (1)必须在Repeatable Read级别下
  • (2)检索条件必须有索引(没有索引的话,mysql会全表扫描,那样会锁定整张表所有的记录,包括不存在的记录,此时其他事务不能修改不能删除不能添加)
  • (3)当查询的索引含有唯一属性(唯一索引,主键索引)时,Innodb存储引擎会对next-key lock进行优化,将其降为record lock,即仅锁住索引本身,而不是范围!若是普通辅助索引,则会使用传统的next-key lock进行范围锁定。

相关文章

  • mysql 的锁以及间隙锁

    1、mysql 的锁 mysql 为并发事务同时对一条记录进行读写时,提出了两种解决方案:1)使用 mvcc 的方...

  • 什么是间隙锁?到底锁了什么?

    MySQL 中关于gap lock(间隙锁) 、 next-key lock(间隙锁+行锁) 的一个问题 在学习 ...

  • MySQL间隙锁

    间隙锁(Next-Key锁)当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件...

  • mysql 间隙锁

    mysql控制间隙锁的参数是: :innodb_locks_unsafe_for_binlog, 这个参数默认值是...

  • MySQL 间隙锁

    间隙锁 间隙锁在MySQL中解决了幻读问题,在MySQL中通过RR也能解决幻读。 但是使用间隙锁时有两个坑需要注意...

  • 3)MySQL的索引

    在理解MySQL锁之前还是有必要先过一下MySQL的索引,因为在讨论间隙锁的时候,会涉及到索引,不同索引导致间隙锁...

  • MySQL记录锁、间隙锁、临键锁(Next-Key Locks)

    MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解[https://www.jianshu.co...

  • MySQL中的锁和并发控制

    综述 对MySQL中并发控制所用到的机制和锁进行整理。 行锁 表锁 间隙锁 临键锁 MVCC 悲观锁 乐观锁 行锁...

  • Mysql X锁,S锁、间隙锁

    1,Mysql X锁和S锁。 1)概念:利用数据库本身提供的锁机制(行级锁)来实现,锁定该行数据。trx_rows...

  • MySQL锁

    MySQL锁分类 全局锁 表级锁 行锁 间隙锁 next-key lock 全局锁 作用范围:对整个数据库实例加锁...

网友评论

      本文标题:mysql 的锁以及间隙锁

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