事务 t1 从用户表查 id=101 的人名字,得到张三。事务 t2 这时候在并发的做事,可能把 id=101 的人名字改王五了。t2 提交了之后。t1 再查,id=101 的人的名字变王五了。这是不可重复读,是不是幻读?
怎么避免这样的上述的不可重复读呢?我读到的记录,就给它加把排斥写锁的读锁,这样别的事务就改不了它(事务要改记录必须给记录加上写锁的前提下)。不可重复读就问题就解决了
吗?
按照上面说的加锁方式,事务 t1 上来查了下用户表里叫李四的有多少个,一查,2 个。事务 t2 与 t1 并发呢,随后插入了一个新的名为李四的用户的记录,提交了。t1 再一查叫李四的几个人,3 个了。这不算不可重复读吗?为什么啊?算幻读吗?为什么啊?
那隔离级别里的『可重复读』,是上述两个问题都解决了,还是只解决了第一个问题?解决方法和我说的一样吗?
============
所以我真的头大,有没有什么官方文档干脆利落地说清楚,MYSQL 5.7 InnoDB 到底在这两种隔离级别下怎么上锁,上的什么锁。
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://v2ex.ih06.com/t/655784
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.