innodb uncommited read实现原理

 

 事务A先执行

 

 事务B随后执行

 

B只有再A事务结束后才会执行update操作,因为A事务对该行添加了写锁,且执行完更新操作不会释放,只有事务执行完成或者事务回滚后才会释放写锁,然后B事务开始操作。当A事务执行完更新操作时,数据库中的name确确实实变为了3。

 若AB都执行成功,在这30秒内,name的值先变为3,再变为4

若A执行失败,B执行成功,则在这30秒内,name的值先变为3,再变为1,再变为2

若A先执行失败,B再执行失败,name的值先变为3再变1再变2再变1

若B先执行失败,A再执行失败,name先变为3再变为1

原理:没有加入MVCC与快照机制,事务读到的就是当前数据库的真值,同时添加了写锁,保证不同事务的先后顺序,从而确保了原子性,没有添加读锁,所以查询效率很高,但是可能造成脏读和不可重复读。

对于undo log,事务提交成功后就可以删除。

 

参考文献:

https://blog.csdn.net/weixin_36477469/article/details/113439667

posted @ 2022-07-01 15:23  无极是一种信仰  阅读(49)  评论(0)    收藏  举报