关于 Mysql 全表扫描时的插入问题

2018-07-24 22:19:08 +08:00
 alexfarm
如果一个查询没有走索引导致全表扫描,mysql 的行级锁会导致在查询时无法插入数据吗?在末尾插入数据可以吗?求解答
3264 次点击
所在节点    MySQL
7 条回复
yangqi
2018-07-24 22:52:41 +08:00
需要全表扫描当然是锁整个表了,怎么可能让你插入。
zjp
2018-07-24 22:53:54 +08:00
前面都说了全表扫描,那用的就不是行级锁啊。和末尾无关…不要把数据库表当成一张二维表。
abcbuzhiming
2018-07-24 23:20:22 +08:00
http://www.cnblogs.com/crazylqy/p/7611069.html
这文章写的不错的:
在 Repeatable Read 隔离级别下,如果进行全表扫描的当前读,那么会锁上表中的所有记录,同时会锁上聚簇索引内的所有 GAP,杜绝所有的并发 更新 /删除 /插入 操作。
XOXO360
2018-07-24 23:35:30 +08:00
这个时候主键重要性。。。
ppyybb
2018-07-24 23:48:11 +08:00
是什么存储引擎,隔离级别是 rc 还是 rr ?如果是 innodb 的话,快照读不会加锁,不影响插入。如果是当前读导致全表扫描,那么应该会锁住所有记录(全部加 next-key,同时加入一个表级意向锁,但是不会采取表锁,可以自行验证),这时候插入应该会被阻塞,因为插入带来的插入意向锁和 next-key 是冲突的。(否则就会导致幻度,这违反 rr 的定义)
alexfarm
2018-07-25 08:19:21 +08:00
@abcbuzhiming 谢谢,今天仔细阅读一下
gabon
2018-07-25 08:33:36 +08:00
读写分离

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/473837

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX