mysql - InnoDB中的鎖
問題描述
問題解答
回答1:------- TRX HAS BEEN WAITING 28 SEC FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 6 page no 4 n bits 80 index idx_a of table `test`.`t` trx id 637972 lock_mode X locks gap before rec insert intention waitingRecord lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 32 0: len 4; hex 8000000b; asc ;; 1: len 6; hex 000000000414; asc ;;
這里說的很清楚啊 lock_mode X意味著是排它鎖 gap代表是區間鎖也就是說在insert之前該表加入了區間排他鎖,為什么呢?因為之前執行的這句delete from t where a = 11;會在(negative infinity,11]這個區間加上排他鎖,為什么是排他鎖而不是Record Lock呢,因為你這里的a并非唯一索引,只是一個普通的索引,具體的看http://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html
回答2:mysql默認的會話隔離級別是repeated read,會產生更多的gap鎖,如果可以接受幻讀,可以考慮降為read commit級別,減少鎖沖突的概率。
相關文章:
1. Python列表或者字典里面的中文如何處理?2. javascript - vue router 怎么實現某個頁面禁止瀏覽器回退?3. css3 - css做動畫效果4. javascript - 讀js權威指南“作為值得函數”產生了疑惑,求釋疑5. javascript - 請問,jquery中創建新節點之后插入之后再給這個節點添加css樣式,可以一句話寫完么?6. javascript - 關于禁用文本選擇與復制的問題7. javascript - html 表單如何恢復8. javascript - 關于JS 事件委托操作ul li標簽的問題9. javascript - ES6 Module可以直接導入commonJS的模塊, 這個是ES6直接就實現了的, 還是babel轉的時候實現的?10. javascript - 【快速判斷數組為空】[]==false 為什么返回true?
