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爬虫用BeautifulSoup爬取<s>元素并写入字典,但某些div下没有这一元素,导致自动写入下一条,如何解决?2. mysql中datetime列如何做筛选?3. 网页爬虫 - 关于Python的编码与解码问题4. mysql - SQL添加记录的数据来源于同一个表5. angular.js使用$resource服务把数据存入mongodb的问题。6. javascript - vue中input的blur影响了下拉的点击事件如何解决7. mysql sql where id in(25,12,87) 结果集如何用按照 25 12 87排序?8. linux - 为什么我在mysql的my.cnf下找不到bind-address?9. mysql - phpMyAdmin无法导入数据10. javascript - 图片请求失败怎么去掉左上角的小图标?

网公网安备