這是一個相當基本和有點奇怪的問題,我想。假設我有一個存儲過程,其中包含INSERT
(或MERGE
)語句,然後是SELECT
語句。INSERT後選擇不會選擇最近添加的行
當我運行SELECT
時,我總能假設INSERT
語句已完成寫入/提交數據嗎?預計SELECT
語句(有時)不會選擇所有最近插入的行嗎?如果是這樣,我需要什麼選項來使SELECT
語句等待INSERT
語句完成(在存儲過程中)或包含可能未提交的數據?
這是一個相當基本和有點奇怪的問題,我想。假設我有一個存儲過程,其中包含INSERT
(或MERGE
)語句,然後是SELECT
語句。INSERT後選擇不會選擇最近添加的行
當我運行SELECT
時,我總能假設INSERT
語句已完成寫入/提交數據嗎?預計SELECT
語句(有時)不會選擇所有最近插入的行嗎?如果是這樣,我需要什麼選項來使SELECT
語句等待INSERT
語句完成(在存儲過程中)或包含可能未提交的數據?
如果它在同一個會話中,它會看到它,無論是否已提交,除非它已被回滾。
一旦承諾其他會話可以看到它。
如果「選擇」是不同的會話,你想讀未提交的數據
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
從我讀過的這個有很多我不想要的副作用。我需要可重現的結果。 – lith
是的,你可以假設,當一個語句完成,那麼所有的數據被正確地放入數據庫中。這與數據庫的ACID屬性有關,也是關係數據庫是流行技術的原因之一。 –
只是爲了插件,如果你想確保數據插入成功,只需使用一個變量並在插入後將其設置爲1,然後檢查變量值是否爲1,然後使用select語句。 –
@GordonLinoff那麼,如果沒有,我該怎麼辦? – lith