zoukankan      html  css  js  c++  java
  • gap间隙锁

    1、什么式gap锁

    (1)在索引记录之间,或者在索引之前,或者索引之后的区间上加锁,就是gap锁。比如:

    SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;

    由于在c1=10和c2=20之间已经加上gap锁,所以不管数据表中是否有c1=15这条数据,这个sql都会阻止试图插入c1=15的事务。

    (2)一个gap锁可能会锁一个索引、多个索引、或者空索引。

    (3)gap锁权衡了性能和并发,并且它只用作于特定的隔离级别。

    2、什么时候会出现gap间隙锁

     用唯一索引查询唯一的行数据,并不会产生gap锁。比如:

    SELECT * FROM child WHERE id = 100;

    如果id是唯一索引,就不会产生gap锁;如果id不是索引或者id不是唯一索引,那么会产生gap锁。

    It is also worth noting here that conflicting locks can be held on a gap by different transactions. For example, transaction A can hold a shared gap lock (gap S-lock) on a gap while transaction B holds an exclusive gap lock (gap X-lock) on the same gap. The reason conflicting gap locks are allowed is that if a record is purged from an index, the gap locks held on the record by different transactions must be merged.

    比如,事务A在间隙上拥有共享锁,事务B在同样的间隙上拥有排他锁。

  • 相关阅读:
    Python数据库 4.Python与数据库的交互
    Python数据库 3.MongoDB(区分大小写)
    Python数据库2.Redis数据库
    Python数据库1. 数据库简介
    Python基础 12.常用模块
    Python基础 11.Vim使用
    Python基础 10.linux基本命令
    栈理解
    java集合Collection
    斐波那契函数
  • 原文地址:https://www.cnblogs.com/BonnieWss/p/11417944.html
Copyright © 2011-2022 走看看