2013-11-27 28 views
0

我需要爲教師創造一個微小的預訂系統。他打算在某個特定時間上線多個項目主題,並且學生可以分別選擇一個主題。MySQL我需要鎖表嗎?

讓我們假定有一個具備兩列「主題」和「name_of_student」的表。我將學生姓名分配到使用UPDATE話題,但想避免的情況是兩個人預訂同一主題在同一時間。

我應該擔心或不MySQL的防止?或者我應該明確使用某種鎖定機制,如果是的話,究竟是什麼?

回答

1

如果兩個學生來自不同的地方訪問數據庫,你不能只是UPDATE表,因爲你可能會覆蓋第一個人的預約。

在這種情況下,通常的策略是增加一個WHERE子句檢查主題仍然是可用的時候,你正在做最後處理,例如而不是

UPDATE topics SET name_of_student = 'Bonzoq' WHERE topic_id = 1 

你會寫

UPDATE topics SET name_of_student = 'Bonzoq' WHERE topic_id = 1 
    AND name_of_student IS NULL 

,並檢查受影響的記錄數等於1。如果它等於0,則UPDATE失敗,因爲name_of_studentNULL了。