mysql - InnoDB中的锁
怪我咯
怪我咯 2017-04-17 15:03:03
0
2
683
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(2)
Peter_Zhu
------- 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 waiting
Record 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

刘奇

mysql預設的會話隔離級別是repeated read,會產生更多的gap鎖,如果可以接受幻讀,可以考慮降為read commit級別,減少鎖衝突的機率。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!