3 回答

TA貢獻(xiàn)1826條經(jīng)驗 獲得超6個贊
可重復(fù)讀
從事務(wù)開始就維護(hù)數(shù)據(jù)庫的狀態(tài)。如果您在會話1中檢索到一個值,則在會話2中更新該值,然后在會話1中再次檢索該值將返回相同的結(jié)果。讀取是可重復(fù)的。
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
閱讀已提交
在事務(wù)的上下文中,您將始終檢索最近提交的值。如果您在會話1中檢索到一個值,在會話2中對其進(jìn)行更新,然后再次在會話1中對其進(jìn)行檢索,則將獲得在會話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貢獻(xiàn)1909條經(jīng)驗 獲得超7個贊
根據(jù)我對這個線程的理解和理解,答案很簡單,而@ remus-rusanu答案則基于以下簡單場景:
進(jìn)程A和B有兩個。進(jìn)程B正在讀取表X進(jìn)程A正在寫入表X進(jìn)程B正在再次讀取表X。
ReadUncommitted:進(jìn)程B可以從進(jìn)程A讀取未提交的數(shù)據(jù),并且基于B的寫入可以看到不同的行。完全沒有鎖
ReadCommitted:進(jìn)程B只能從進(jìn)程A讀取已提交的數(shù)據(jù),并且基于僅COMMITTED B的寫入,它可以看到不同的行。我們可以稱之為簡單鎖嗎?
RepeatableRead:無論進(jìn)程A在做什么,進(jìn)程B都將讀取相同的數(shù)據(jù)(行)。但是進(jìn)程A可以更改其他行。行級塊
可序列化的:進(jìn)程B將讀取與以前相同的行,并且進(jìn)程A無法在表中讀取或?qū)懭搿?strong>表級塊
快照:每個進(jìn)程都有自己的副本,并且正在使用它。每個人都有自己的看法
- 3 回答
- 0 關(guān)注
- 3798 瀏覽
添加回答
舉報