2017-10-18 74 views
0

這是一個相當基本和有點奇怪的問題,我想。假設我有一個存儲過程,其中包含INSERT(或MERGE)語句,然後是SELECT語句。INSERT後選擇不會選擇最近添加的行

當我運行SELECT時,我總能假設INSERT語句已完成寫入/提交數據嗎?預計SELECT語句(有時)不會選擇所有最近插入的行嗎?如果是這樣,我需要什麼選項來使SELECT語句等待INSERT語句完成(在存儲過程中)或包含可能未提交的數據?

+3

是的,你可以假設,當一個語句完成,那麼所有的數據被正確地放入數據庫中。這與數據庫的ACID屬性有關,也是關係數據庫是流行技術的原因之一。 –

+1

只是爲了插件,如果你想確保數據插入成功,只需使用一個變量並在插入後將其設置爲1,然後檢查變量值是否爲1,然後使用select語句。 –

+0

@GordonLinoff那麼,如果沒有,我該怎麼辦? – lith

回答

0

如果它在同一個會話中,它會看到它,無論是否已提交,除非它已被回滾。

一旦承諾其他會話可以看到它。

0

如果「選擇」是不同的會話,你想讀未提交的數據

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
+0

從我讀過的這個有很多我不想要的副作用。我需要可重現的結果。 – lith