2017-09-12 93 views
1

有沒有辦法鎖定最近插入的行,以便其他事務在我目前的事務仍在繼續時不會看到它?鎖定新插入的行[PostgreSQL]

+2

如果您在事務中插入'INSERT',那麼在該事務發出'COMMIT'之前,它將不會被任何其他連接看到。沒有必要執行任何額外的鎖定。 – jmelesky

+0

謝謝,是啊,我只是意識到這一點!對於所有的隔離級別,它都有這種行爲 – Zanko

回答

2

你不需要。事實上,你不能有相反的行爲。在您的事務提交之前,無法讓新插入的行可見。

儘管它對於併發SELECT不可見,但它仍然可以影響併發INSERT(或UPDATE)。具體來說,如果您嘗試在兩個不同的事務中將相同的值插入到唯一索引中,則會阻塞另一個事務,直到其他事務提交或回滾。然後它會決定是否需要引發唯一的違規錯誤,或者是否可以繼續。所以雖然你不能直接看到未提交的數據,但有時你可以看到它的副作用。