Mysql 四种 隔离级别学习(二)

上节我们学习了Read Uncommitted隔离级别,在这种隔别级别下,可能会出现脏读,这一节,我们继续学习四种隔防级别中另一种Read Committed(读取提交内容)

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也会出现不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

举个例子来说明一下 不可重复读, 如:在 test 库有一个表 tx,表里有3条数据,别外特别注意,测试之前先把自动提交事务关闭,并把隔离级别设置成Read Committed,如下图:

1.png

这时客户端B也开启了一个事务,并更新数据,此时客户端A开始的事务并没有提交,并在这期间查询两次数据,发现数据并不一致,如下图

2.png

经过上面的实验可以得出结论,已提交读隔离级别解决了脏读的问题,但是出现了不可重复读的问题,即事务A在两次查询的数据不一致,因为在两次查询之间事务B更新了一条数据。已提交读只允许读取已提交的记录,但不要求可重复读。

好了,在此希望能帮助初学者,明天我们继续一起学习另一种隔离级别。如果哪有不明白或写错的,请高手留言说明,以免会误导其它朋友。谢谢!

未经允许不得转载:易读小屋  »  Mysql 四种 隔离级别学习(二)