请问 mysql 是使用什么来解决幻读问题的?

2019-11-14 18:24:39 +08:00
 vjnjc
最近奔波于面试,有个面试官认为是间隙锁 gap lock 解决的幻读,有的面试官认为是 mvcc 解决的幻读,我太菜了,他们说啥就是啥吧,但又好想把他们约出来互相比划一下。有没有长得帅的来解答一下我的疑惑,到底是 gap lock 还是 mvcc 啊。。。

还有什么是幻读,看网上教程举的例子都是 update xxx where field=value,这个 value 和你读出来的 value 不一致,但心理上这个解释说不过去啊
----来自一个菜鸟的真诚发问
2857 次点击
所在节点    问与答
6 条回复
haiyang416
2019-11-14 18:57:07 +08:00
可以看下 MySQL 相关的书吧,图快的话可以看下这篇文章: https://tech.meituan.com/2014/08/20/innodb-lock.html
taogen
2019-11-14 19:29:20 +08:00
幻读是一个事务中,多次执行同一条 select 语句,如,第一次读 name 是张三,第二次读是 name 是李四。

数据库中有两种锁,读取锁和写入锁。解决幻读的方法是设置事务隔离级别可解决。不同的事务隔离级别读写的限制不一样,即使用了不同的锁。解决幻读可以设置事务隔离级别为:“序列化”隔离级别。MySQL 中的“可重复度读”隔离级别解决了 range query 的幻读,这个隔离级别在 MySQL 中也是解决了幻读。
xupefei
2019-11-14 19:33:01 +08:00
什么有的没的,就是 2 phase locking。
https://en.m.wikipedia.org/wiki/Two-phase_locking

这不是数据库基础概念吗
ylsc633
2019-11-14 19:43:44 +08:00
开始我也没搞明白. 后来听同事聊 知道了一些..

然后顺手贴个网址吧

http://interview.wzcu.com/%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL.html#mysql%E4%BA%8B%E5%8A%A1%E7%9A%84%E9%9A%94%E7%A6%BB%E7%BA%A7%E5%88%AB
pgxxhh
2019-11-24 14:47:02 +08:00
当前读是 间隙锁, 快照读 是 mvcc 吧
wudanyang
2019-11-30 11:34:40 +08:00

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

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

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

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

© 2021 V2EX