读提交和可重复读之间的区别

我认为上述隔离级别是如此相似。有人可以用一些很好的例子来描述主要区别是什么吗?



SMILET
浏览 3602回答 3
3回答

跃然一笑

可重复读从事务开始就维护数据库的状态。如果您在会话1中检索到一个值,则在会话2中更新该值,然后在会话1中再次检索该值将返回相同的结果。读取是可重复的。session1> BEGIN;session1> SELECT firstname FROM names WHERE id = 7;Aaronsession2> BEGIN;session2> SELECT firstname FROM names WHERE id = 7;Aaronsession2> UPDATE names SET firstname = 'Bob' WHERE id = 7;session2> SELECT firstname FROM names WHERE id = 7;Bobsession2> COMMIT;session1> SELECT firstname FROM names WHERE id = 7;Aaron阅读已提交在事务的上下文中,您将始终检索最近提交的值。如果您在会话1中检索到一个值,在会话2中对其进行更新,然后再次在会话1中对其进行检索,则将获得在会话2中修改的值。它读取最后提交的行。session1> BEGIN;session1> SELECT firstname FROM names WHERE id = 7;Aaronsession2> BEGIN;session2> SELECT firstname FROM names WHERE id = 7;Aaronsession2> UPDATE names SET firstname = 'Bob' WHERE id = 7;session2> SELECT firstname FROM names WHERE id = 7;Bobsession2> COMMIT;session1> SELECT firstname FROM names WHERE id = 7;Bob说得通?

jeck猫

根据我对这个线程的理解和理解,答案很简单,而@ remus-rusanu答案则基于以下简单场景:进程A和B有两个。进程B正在读取表X进程A正在写入表X进程B正在再次读取表X。ReadUncommitted:进程B可以从进程A读取未提交的数据,并且基于B的写入可以看到不同的行。完全没有锁ReadCommitted:进程B只能从进程A读取已提交的数据,并且基于仅COMMITTED B的写入,它可以看到不同的行。我们可以称之为简单锁吗?RepeatableRead:无论进程A在做什么,进程B都将读取相同的数据(行)。但是进程A可以更改其他行。行级块可序列化的:进程B将读取与以前相同的行,并且进程A无法在表中读取或写入。表级块快照:每个进程都有自己的副本,并且正在使用它。每个人都有自己的看法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server