菜鸟请教一个 mysql 问题

2020-05-19 22:02:56 +08:00
 zxc1234

1.mysql 的在写的时候,会用写锁锁住,比如行锁,锁住这行,那么这时候可以读吗? 如果可以读,那跟 java 的读写锁好像不一样呢?

2847 次点击
所在节点    MySQL
4 条回复
hangszhang
2020-05-19 23:34:41 +08:00
可以简单的 select ..., mvcc 实现了一致性快照读. 但是不能 select ... for update 或者 select ... lock in share mode
MOONLIGHTT
2020-05-19 23:43:34 +08:00
写锁锁住的时候不能读,因为可能导致资源的 [不一致性] (例如在写某行的时候,假设能读取数据,则在写的不同时刻读出来的数据可能是不同的)。

另外读锁锁住的资源仍然可读。
alakey1989
2020-05-19 23:56:45 +08:00
写锁可以快照读
xizismile
2020-05-20 00:16:39 +08:00
mysql 的读分为两种,锁读(读的时候加共享锁或者互斥锁)和一致性读(不加锁的读,又叫快照读)

一个 session 锁住一行数据之后
如果另一个 session 使用锁读的话会阻塞,使用一致性读的话,会从多版本快照( mvcc )里面读取数据,不会阻塞

当然上面说的只适用于可重复读和读已提交的数据库隔离级别

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

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

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

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

© 2021 V2EX