采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
假设当前的隔离级别是读已提交,如果事务A和事务B都已经begin了,
如果事务A修改数据但没有commit,那么事务B读到的还是begin之前的版本,这个时候需要走undo 读取快照。 如果事务A commit了,那么事务B是可以读到事务A修改的那条数据的,这时候就不需要走undo,也就是说读的数据,不是事务B begin之前的那个版本了。
这么来看读已提交,似乎不是严格意义的快照读
这里说的快照读,不是“快照隔离级别(snapshot isolation)”。对于读已提交,每次读,读的是现在这一刻的快照。
为啥“现在这一刻”还能算“快照”呢,因为对现在来说,其他事物还没commit的数据,是未来的数据。所以相对于未来的数据来说,现在的数据就是“在这一刻的快照”。
没看懂,感觉更不明白了~~ 不应该是根据是否走undo log的历史版本,来界定是否是当前读和快照读吗
似乎理解了一些。 读已提交:根据每次SELECT 时,其它事务的提交情况。 比如说其它事务在事务A事务开启过程中,修改了两次,第一次修改后并提交了,第二次又修改了但是还没有提交。那么读已提交读到的数据,就需要走undo log来读第一次提交的结果
登录后可查看更多问答,登录/注册
从数据库原理到高性能实战,一次性涵盖
772 16
783 8
897 7
1.2k 6
747 6