超链接:mysql大纲
1. 并发问题
- 脏读(A事务读取到了B事务未提交数据)
- 不可重复读(A事务读取,B事务更修改,A再读取时,数据发生修改,,针对“修改”)
- 幻读(A事务读取,B事务增删,A事务再次读取,数据条目发生变化,,针对"增删")
2.0 隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行化
mysql默认级别“可重复读”(会出现“幻读”)
MVCC + 间隙锁 防止“幻读”
一致非锁定读能解决幻读;但一致锁定读,会造成幻读现象
- 普通的select使用的“快照读”,此时如果有其他事物添加记录,由于添加的记录的事务比select事务大,所以读取不到
- select for update 使用了"当前读",此时另一个事务添加记录,提交后;此事务要读取当前最新数据,会将新添加的记录标记为当前事务,导致能读取到数据
- update操作(新插入一行,并以当前事务的版本号作为新行的创建版本号,同时将原记录行的删除版本号设置为当前事务版本号)
能否出现幻读,取决于A事务是否会将B事务新增的记录,再次标记为当前事务。
参考