1、4种隔离级别2、
mysql:可重复读
oracle:读已提交
3、mysql实现可重复读--MVCC(多版本并发控制)
基于乐观锁,实现读已提交和可重复读
每行记录增加隐藏的两列,trx_id(当前行最新修改的事务id)和roll_pointer(指向更新前的undo log)
每开启一个事务,事务版本号会递增
read view,包括4个部分
可重复读:查询会生成一个read view
1、事务id<最小值,说明是之前事务的数据,直接返回
2、事务id>最小值,且小于下一次生成的事务id,且在未提交的事务id集合中,
则根据roll_pointer查找undo log日志链,找到之前版本的数据
3、事务id=自己事务id,说明是自己修改的数据,直接返回
读已提交:每次查询都会生成read view
事务id>最小值,且小于下一次生成的事务id,但不在未提交的事务id集合中,说明已经提交
则直接返回,所以会出现先后两次查询的结果不一致。