1.概念:
脏写:如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发生了脏写(事务A修改还未提交的事务B所修改的变量,一旦事务B执行回滚操作,那么事务A所做的操作就是无效的)
脏读:如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发生了脏读(事务A读取事务B还未提交的数据,一旦事务B执行回滚操作,那么事务A读取到的数据就是不存在的)
不可重复读:一个事务对一个变量的连续查询读取到不同的数据
幻读:在一个数据区间内,事务连续地按照一定条件查询数据时读取到了上次查询所没有的数据(强调新增,删除或者记录变少不算)
严重性:脏写》脏读》不可重复读》幻读
2.事务隔离级别
SQL标准中的四种隔离级别
4个隔离级别:
- READ UNCOMMITTED:未提交读。
- READ COMMITTED:已提交读。
- REPEATABLE READ:可重复读。
- SERIALIZABLE:可串行化。
此外Mysql中已经成功在可重复读隔离级别下解决了幻读问题,采用的是MVCC机制(多版本并发控制)
而mvcc的实现机制讲简单一点就是通过
1)ReadView
2)undo log版本链
来实现的
另外在补一篇个人觉得写得比较好的博客链接,好文就要多看:
http://www.zhai14.com/blog/strenghen-comprehension-on-dirty-read-and-phantom.html