请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

读已提交为什么也叫快照读

假设当前的隔离级别是读已提交,如果事务A和事务B都已经begin了,

如果事务A修改数据但没有commit,那么事务B读到的还是begin之前的版本,这个时候需要走undo 读取快照。
如果事务A commit了,那么事务B是可以读到事务A修改的那条数据的,这时候就不需要走undo,也就是说读的数据,不是事务B begin之前的那个版本了。

这么来看读已提交,似乎不是严格意义的快照读

正在回答 回答被采纳积分+3

1回答

Moody 2022-12-02 16:31:36

这里说的快照读,不是“快照隔离级别(snapshot isolation)”。对于读已提交,每次读,读的是现在这一刻的快照。

为啥“现在这一刻”还能算“快照”呢,因为对现在来说,其他事物还没commit的数据,是未来的数据。所以相对于未来的数据来说,现在的数据就是“在这一刻的快照”。

0 回复 有任何疑惑可以回复我~
  • 提问者 秋晨001 #1
    没看懂,感觉更不明白了~~
    
    不应该是根据是否走undo log的历史版本,来界定是否是当前读和快照读吗
    回复 有任何疑惑可以回复我~ 2022-12-05 22:28:12
  • 提问者 秋晨001 #2
    似乎理解了一些。
    读已提交:根据每次SELECT 时,其它事务的提交情况。
    比如说其它事务在事务A事务开启过程中,修改了两次,第一次修改后并提交了,第二次又修改了但是还没有提交。那么读已提交读到的数据,就需要走undo log来读第一次提交的结果
    回复 有任何疑惑可以回复我~ 2022-12-06 11:25:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信