3 回答
TA贡献1826条经验 获得超6个赞
可重复读
从事务开始就维护数据库的状态。如果您在会话1中检索到一个值,则在会话2中更新该值,然后在会话1中再次检索该值将返回相同的结果。读取是可重复的。
session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
阅读已提交
在事务的上下文中,您将始终检索最近提交的值。如果您在会话1中检索到一个值,在会话2中对其进行更新,然后再次在会话1中对其进行检索,则将获得在会话2中修改的值。它读取最后提交的行。
session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;
session1> SELECT firstname FROM names WHERE id = 7;
Bob
说得通?
TA贡献1909条经验 获得超7个赞
根据我对这个线程的理解和理解,答案很简单,而@ 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无法在表中读取或写入。表级块
快照:每个进程都有自己的副本,并且正在使用它。每个人都有自己的看法
- 3 回答
- 0 关注
- 3699 浏览
添加回答
举报