MySQL隔离级别读未提交(Read uncommitted)的妙用

看到一个MySQL面试题,关于隔离级别,读未提交(Read uncommitted)的一个使用场景。

原始问题如下:
业务通过一个大事务在插入一批非常大的数据,这个事务已经执行了很长时间,没有提交,如何知道当前已经插入了多少条数据?

估计很少有人会想到使用读未提交隔离级别来解决这个问题。不过思路确实很新颖,因为通常情况下,读未提交,以及串行读这两个隔离级别在正常的业务场景下,都不会使用,似乎数据库对这两个隔离级别功能的实现有点多余,只是为了满足事务隔离性理论的完整性,实际生产环境几乎没有人会用。

下面我们来验证一下,读未提交隔离级别是否真的能解决上面的那个问题。

验证的MySQL版本:5.7.19

session1 session2 备注
begin;
insert into tb values(1,’1′);
select * from tb; 查不到数据
set tx_isolation=’read-uncommitted’; 设置隔离级别为读未提交
select * from tb; 查到了session1未提交的数据

经过验证,确实能够通过设置隔离级别为读未提交,来检查insert大事务的进度。

发表评论