[MySQL] 理解mysql間隙鎖


在RR可重復讀隔離級別下 , InnoDB存儲引擎

當用范圍條件而不是相等條件檢索數據 , 並執行update或者delete操作

會把符合條件的范圍 , 包括條件里面不存在的記錄加上間隙鎖

 

當其他事務往這個范圍內插入記錄時 , 會把阻塞

 

例子:

事務A

set autocommit=0; //關閉自動提交

select * from message where id >10 and id <20; // 中間沒有17這個數據

 

 

update message set status="unread" where id >10 and id <20;

還沒有提交

 

事務B:

set autocommit=0;

insert into message (id)value(17);

 

 事務B會被阻塞 , 直到超時

 

這個就是間隙鎖的作用 , 目的是防止在這個范圍內插入 , 防止出現幻讀問題 

因為如果能插入成功 , 事務A查詢是看不到的 , 但是這條數據是真實存在的 , 事務A進行操作會受到新插入數據的影響 , 加上間隙鎖就ok了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM