使用樂觀鎖定策略時,它可以解決像下面併發問題:樂觀鎖定絕對安全嗎?
| the first transaction started | | | | select a row | | | the second transaction started | update the row with version checking | | | select the same row | commit txn | | | update the row with version checking | | | | rolls back because version is dirty
但是,如果在極少數情況下,如果在第二個事務更新是在第一筆交易,但之前的UDPATE後交易提交?
| the first transaction started | | | the second transaction started | select a row | | | select the same row | update the row with version checking | | | update the row with version checking | commit txn | | | rolls back because version is dirty // will it? | | | |
我做了一個實驗,在第二個事務更新無法讀取「髒」的版本,因爲第一個事務還沒有被提交。第二筆交易在這種情況下會失敗嗎?
@亞當阿羅德謝謝你告訴我這句格言。我谷歌因爲我不是一個本地的英語演講者:)但樂觀鎖定策略會在我提到的情況下工作嗎? – Hippoom
如果真的樂觀,你怎麼使用交易功能?更新將自動失敗,無需任何回滾。 – tia
@tia也許在這個例子中,無論有無事務都可以。但有時我需要將其他更改(例如可能插入某個子表的某些子元素)回滾到數據庫 – Hippoom