问题:当出现某些特殊场景,一个事务A需要在未提交之前,一定要读取的是事务B提交的最新数据,该如何处理?
在MySQL中,事务隔离级别:读未提交、读提交、可重复读、串行化。
一、读未提交
读未提交会读到其它线程未提交的脏数据,虽然可以一直读到数据,但大部分都是脏数据,所以无法保证是最新有效的数据。
二、读已提交
可以保证一直读取有效数据,但普通事务无法保证可重复读。
三、可重复读
可以对某些特殊业务进行加行锁,使用共享锁(lock in share mode)即可保证一直读取最新数据。
当事务A、事务B同时begin时且未commit时,事务B修改了数据,若这里事务A如果在未提交情况下想要读取到最新数据,可以使用lock in share mode进行加锁读取,但是需要事务B进行提交。
注意:就算在“可重复读”模式下,加锁也会导致当前线程读取最新数据,mysql在加任何锁(如共享锁lock in share mode,排它锁for update,delete)之前都会获取最新数据,MySQL乐观锁通过Update版本号就是用的排它锁原理(防止多个线程同时加版本号出现错乱)
四、串行化
可以实现一直读最新数据,但效率低下。
标签:事务,读取,最新,保证,提交,MySQL,数据 From: https://www.cnblogs.com/yifanSJ/p/17580708.html