天蓬老师2017-04-17 15:05:03
1 2 3 4 5 |
|
這裡說的很清楚啊 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
怪我咯2017-04-17 15:05:03
mysql預設的會話隔離級別是repeated read,會產生更多的gap鎖,如果可以接受幻讀,可以考慮降為read commit級別,減少鎖衝突的機率。