前提条件,两个session开启事物,start transaction; 然后进行一下操作,session分别是A和B
一、读未提交(脏读)
AB开始事物后,A修改数据未提交,B可以读到A修改的数据;
二、读已提交(幻读)
AB开始事物后,B读取id=1的数据,name=csdn;A修改数据name=博客,并提交;B事物还没有结束,继续读取id=1的数据,发现此时name已经改为”博客“;
三、可重复读
AB开始事物后,B读取id=1的数据,name=csdn;A修改数据name=博客,并提交;B事物还没有结束,继续读取id=1的数据,此时依然name=csdn;B的事物结束后,重新读才能读到A修改的新数据。
主要通过MVCC来控制,每次修改都有不同的事物版本,同一个事物每次读取数据都是从同一个版本中读取,所以修改后依然读取的是同样的数据,实现可重复读;
四、串行化
AB开始事物后,A对id=1的数据进行update,那么B对id=1的数据进行增删改查都需要等待A事物结束。