mysql事务隔离级别详解

  当mysql同时执行多个事务时,就有可能出现脏读、幻读、不可重复读的现象,于是就有隔离级别的概念

一、隔离级别的分类

  读未提交(RU):当一个事务还未提交时,他做的变更被其他事务看到(容易出现脏读)

  读已提交(RC):一个事务已经提交,其他事务才能看到他的变更。(容易出现幻读)

  可重复读(RR):一个事务在执行过程中看到的数据,总是跟执行前看到的数据是一致的,未提交时变更的内容其他事务也看不到(可防止幻读)

  串行化(SR):对同一行记录,写会加写锁,读会加读锁,当发生锁冲突时,后执行的事务要等前面执行的事务执行完成后才能执行

  举例说明:

在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。在“读提交”隔离级别下,这个视图是在每个SQL语句开始执行的时候创建的。这里需要注意的是,“读未提交”隔离界别下直接返回记录上的最新值,没有视图概念;而“串行化”隔离级别下直接用加锁的方式来避免并行访问。

脏读:一个事务读到了另一个事务未提交的数据

幻读:事务a按一定条件读取了该表的一些数据,然后事务b想该表插入了一些满足事务a查询条件的数据,当事务a再次以相同条件查询数据时,会发现多出来一些数据,就好像产生了幻觉一样,我们称为幻读

不可重复读:事务a读取了某条数据,事务a没有提交,然后事务b修改了该条数据,这时事务a再次读取该条数据,这样两次读取的数据不同,我们成为该条数据为不可重复读。概况一句话就是一个事务多次读取某条数据,发现读取的数据不完全相同。

 参考文档:https://blog.csdn.net/xcy1193068639/article/details/85058641

原文地址:https://www.cnblogs.com/shi-san/p/13700235.html