1. 程式人生 > >GAP LOCK(間隙鎖)

GAP LOCK(間隙鎖)

  innodb間隙鎖就是不僅僅鎖住所需要的行(如果鎖住的這行不存在)還會鎖住一個範圍的行,這個範圍依據鎖住的這行而定。上下剛好是兩個相鄰索引葉節點的範圍。包含下範圍,不包含上範圍。

   在資料庫引數中, 控制間隙鎖的引數是:innodb_locks_unsafe_for_binlog, 這個引數預設值是OFF, 也就是啟用間隙鎖, 他是一個bool值, 當值為true時表示disable間隙鎖。但是開啟這個引數會對binlog的記錄順序產生一定影響,從而在複製和恢復時,就會導致資料不一致,這點需要注意。

這個引數不能動態修改,只能在引數檔案中設定,然後重啟mysql服務生效。

mysql> use teacher;

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from t3 where id<4;
Query OK, 0 rows affected (0.00 sec)

刪除a小於4的行,從表中來看是沒有滿足a小於4的行,通過gap的屬性知道,對於a<4的行,innodb都會加鎖,一直加到等於4

開啟另一個會話,禁止自動提交
mysql> use teacher;

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t3 values(3,'Jim',45);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

相關推薦

GAP LOCK(間隙)

  innodb間隙鎖就是不僅僅鎖住所需要的行(如果鎖住的這行不存在)還會鎖住一個範圍的行,這個範圍依據鎖住的這行而定。上下剛好是兩個相鄰索引葉節點的範圍。包含下範圍,不包含上範圍。    在資料庫引

GAP LOCK——間隙

什麼是間隙鎖? 這是mysql資料庫中的一種鎖,它會出現在如下場景中 我們向表中新增一條資料age=20,這條資料在本來是沒有的,在insert還沒有提交的時候去select * from tableA a where a.age>15 and a.age<25,

MySQL InnoDB機制之Gap Lock、Next-Key Lock、Record Lock解析

分享圖片 nbsp 級別 rate efault 原因 大於 記錄鎖 html MySQL InnoDB支持三種行鎖定方式: l 行鎖(Record Lock):鎖直接加在索引記錄上面,鎖住的是key。 l 間隙鎖(Gap Lock):鎖定索引記錄間隙,確保索引記錄

GAP間隙,對唯一鍵,普通索引產生的不同影響)

-- (1)先建表,用於證明普通索引,有無間隙鎖-- 建立間隙表,name用的普通索引drop table if exists  test_gap;create table test_gap(id int primary key auto_increment comment

GAP LOCK引起的死

先了解一下什麼是GAP LOCK 在INNODB中,record-level lock大致有三種:Record, Gap, and Next-KeyLocks。簡單的說,RECORDLOCK就是鎖住某一行記錄;而GAPLOCK會鎖住某一段範圍中的記錄;NEXT-KEYL

0913關於間隙的模擬

如果 innodb 上界 _for 兩個 net 順序 模擬 isolation 轉自http://blog.itpub.net/22418990/viewspace-753572/ mysql innodb間隙鎖就是不僅僅鎖住所需要的行(如果鎖住的這行不存在)還會鎖住一

Mysql加過程詳解(9)-innodb下的記錄間隙,next-key

ans 唯一索引 crazy cimage -h insert tran 存在 gin Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關於mysql 幻讀理解 Mysql加鎖過程詳解(3)-關於mysql 幻讀理解 Mysql加鎖過程詳解(4)-

C#中lock實例教程

文件 校驗 clas style 個人 fault adding 為什麽 mvc 5 在c#中有個關鍵字lock,它的作用是鎖定某一代碼塊,讓同一時間只有一個線程訪問該代碼塊,本文就來談談lock關鍵字的原理和其中應註意的幾個問題: lock的使用原型是: lock(X

[LeetCode] Open the Lock

span 方法 stuck 什麽 c++ ava 記錄 死鎖 imu You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: ‘0‘, ‘1‘, ‘2‘, ‘

MySQL 間隙

死鎖分析 des ola ast star del PE ant for 一.根據案例二:不同索引加鎖順序的問題,模擬重現死鎖(詳細操作步驟) 1.RR級別下,更新操作默認會加行級鎖,行級鎖會對索引加鎖 2.如果更新語句使用多個索引,行級鎖會先鎖定普通索引,再鎖定聚簇索引

mysql repeatable-read 一次利用間隙解決幻讀案例

修改 進行 最大值 優化 sha 條件 臟讀 事務隔離 rom repeatable-read是Mysql默認事務隔離級別!能解決臟讀以及不可重復讀的問題,但可能出現幻讀的情況 不可重復讀:在一個未提交的事務裏,二次查詢結果可能不相同,因為在這個事務執行過程中,外面的

JUC--Callable 以及Lock同步

dex void vat 解鎖 .get ktr 才會 靈活 back /** * 一、創建執行線程的方式三:實現Callable接口。相較於實現Runnable接口方式,方法可以有返回值,並且可以拋出異常 * 二、callable 需要FutureTask實現類的支

【轉】【MySQL】MySQL中的(表、行,共享,排它間隙

https://blog.csdn.net/soonfly/article/details/70238902 本文參考:  http://mysqlpub.com/thread-5383-1-1.html  http://blog.csdn.net/c466254931/ar

ZOJ - 3861——Valid Pattern Lock 數字模擬

Pattern lock security is generally used in Android handsets instead of a password. The pattern lock can be set by joining points on a 3 × 3 matrix in

程序(三):程序同步——Lock)、Semaphore(訊號量)、Event(事件)

目錄 鎖 —— multiprocess.Lock 訊號量 —— multiprocess.Semaphore(瞭解) 事件 —— multiprocess.Event(瞭解) 鎖 —— multiprocess.Lock   當多個程序使用同一份資料資源的時候,就會引發資料

MYSQL InnoDB下的記錄間隙,next-key

innodb下的記錄鎖(也叫行鎖),間隙鎖,next-key鎖統統屬於排他鎖。 行鎖 記錄鎖其實很好理解,對錶中的記錄加鎖,叫做記錄鎖,簡稱行鎖。 生活中的間隙鎖 程式設計的思想源於生活,生活中的例子能幫助我們更好的理解一些程式設計中的思想。 生活中排隊的場景,小明,小紅,小花三個人

多執行緒回放+flush tables with read lock

文章目錄 多執行緒回放+flush tables with read lock 死鎖 一、場景描述 二、死鎖排查 三、解決辦法 四、如何復現的? 多執行緒回放+flush tables with re

Python 多執行緒,(全域性變數)資料共享,threading.Lock() 互斥

  demo.py(互斥鎖): import threading import time # 定義一個全域性變數 g_num = 0 def test1(num): global g_num # 全域性變數可以實現執行緒間資料共享。也可以通過傳參實現 fo

多執行緒安全問題之Lock顯示

package com.hls.juc;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 解決多執行緒安全問題的方式: 3種 * synchronized: 隱式鎖 * 1.

多線程安全問題之Lock顯示

線程安全問題 lee 多線程安全 + - break ket imp 同步鎖 new package com.hls.juc;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.R