关于MySQL幻读的实验
2024-10-08 04:32:19
该实验基于 CentOS 7 + MySQL 5.7 进行
打开两个窗口连接到MySQL
第一个连接的事务我们命名为 T1
第二个连接的事务我们命名为 T2
T2 发生在 T1 的 O1 操作结束以后。
可以看到在 RR 隔离级别下,T1 的 O1 操作先进行查询 id=1 的用户信息,显示没有结果,按照正确的逻辑,此时我们是可以插入 id=1 的用户的;
然后我们在 T2 中执行了插入操作,插入了 id=1 的用户,并且提交成功;
然后我们在 T1 中也执行形同的插入操作,试图插入 id=1 的用户,此时报错,说违反了主键约束;
然后我们在 T1 中再次查询 id=1 的用户信息,发现仍然是没有结果。
这对于事务 T1 来说,是不是很过分?我先查询,你告诉我没有,我插入,你不让我插入,说主键冲突,我再查询,还是没有,你要怎样???
通过这个实验,可以清楚的看到,MySQL 的 RR 隔离级别通过 MVCC 确实保证了两次 select 结果的一致性,但此时 insert 带来的主键冲突问题并不能解决,我认为这应该称之为“半幻读”。
有人说通过 select ... for update 可以加锁避免幻读,是你没用而已。我认为 for update 手动加锁避免幻读并不是 RR 隔离级别本身带来的特性,并不能说 RR 隔离级别能够避免幻读。
最新文章
- 分布式服务注册和发现consul 简要介绍
- CSS中各种各样居中方法的总结
- Mac下遇到 'reading initial communication packet’ 问题
- 改变ubuntu终端显示语言(桌面系统是中文,终端提示是英文)
- Maven入门系列(二)--设置中央仓库的方法
- Flink DataSet API Programming Guide
- #linux包之psmisc之fuser命令
- socket传输过程
- maven安装配置(myeclipse)(一)
- android 自动化(1)
- undefined 和 null 的异同
- hdu 1205
- java转换字符串的编码(转)
- Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)
- spring security 3.x 多页面登录配置入门教程
- Python VisibleDeprecationWarning: converting an array with ndim >; 0 to an index will result in an error in the future
- IDEA新建项目时,没有Spring Initializr选项
- jenkins如何获取gitlab上的代码
- 初学JDBC的一些总结(一)
- http请求之get和post的区别
热门文章
- intellij idea 搜索
- PHP实现购物车的思路和源码分析
- 为 Ubuntu 18.04 添加开机自动加载 ntfs分区 功能
- 洛谷 1131 [ZJOI2007] 时态同步
- tp3.2.3 解决http://lx.com/后必须加index.php才能访问的问题,配置文件中忘了加index index.php index.html 等默认文件
- 防止SyntaxHighlighter.js的闪烁闪一下的方法
- ifram子页面与父页面的方法相互调用
- java NIO之HelloWorld
- 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用
- Yarn install 报错 Resolving packages... [2/4] Fetching packages... info There appears to be trouble with your network connection. Retrying