2011-07-29 48 views
0

我有以下簡單的情況。我應該在這個特定的場景中使用什麼樣的數據庫鎖定?

三臺電腦將更新電影預訂表。我應該鎖定整個表還是鎖定對應於將更新的座位的行?我可以在這裏考慮樂觀的併發控制嗎?

我只是在尋找樂觀和悲觀的併發控制,並且偶然發現了不同的鎖,並想知道哪種方案最適合。

+1

如果這是作業,請使用[作業]標籤。如果這不是作業,請列出您實際使用該應用程序的實際數據庫。大多數RDBMS都會進行行鎖定,但是您可能正在使用不鎖定行的鎖定。 –

+0

這不是作業。我只是在尋找樂觀和悲觀的併發控制,並且偶然發現了不同的鎖,並想知道哪種方案最適合。 – roz

+1

「我只是在尋找樂觀和悲觀的併發控制,並且偶然發現了不同的鎖。好的。鏈接會很有用,所以我們知道你在說什麼。 「想知道哪種情況最適合。」問題中只有一種情況。此外,這是RDBMS的一項自動功能。你是否在問覆蓋默認的鎖定策略? –

回答

1

您的DBMS應該處理這種鎖定,您只需確保您不會嘗試更新已被預訂的座位 - 例如,

update seat 
set status = 'BOOKED', booking_ref = :booking_ref 
where seat_no = :seat_no -- identify the seat to book 
and status = 'FREE';  -- ensure it is currently free 

如果2個會話試圖在同一時間預訂同一個座位,一個會成功,另一個會失敗。你的代碼需要檢查它是否成功。

樂觀與悲觀鎖定是應用程序而不是DBMS問題。而不是全部進入這裏,我會告訴你一個existing SO question

+0

但內部是如何完成的?使用行鎖,臺鎖等?在哪種併發控制機制下,樂觀還是悲觀? – roz

+1

答案可能因DBMS而異。理想情況下,行鎖 - 鎖定需要鎖定的最小值以達到目的。樂觀與悲觀鎖定完全不同,它是一個應用程序問題而不是數據庫問題。 –

+0

希望不是桌上的鎖!這些系統不能很好地擴展.... –

相關問題