2012-04-30 65 views
1

我有一個php/MYSQL網站,供學生在宴會上選擇餐位。一旦獲得10個席位,表格就不再可用。我怎樣才能防止兩個或更多的學生同時預定一個座位&最多3位客人?看起來,如果兩名學生同時進入&試圖在同一張桌子上預訂座位,數據就會過度或者可以分配超過10個座位。我需要一種方法來確保第二個用戶能夠編寫他的選擇之前,第一個嘗試預訂席位的席位可以寫入數據庫?任何幫助,將不勝感激。防止同時用戶覆蓋MYSQL數據

回答

1

這樣做

UPDATE Seating SET AvailableSeats = AvailableSeats - 4 WHERE TableId = 5 AND AvailableSeats = 7; 

哪裏7從早期讀了。如果此更新失敗,則在此期間您知道有其他人分配了席位。

+0

+1此解決方案可行。然而,如果你想保留4個席位,我會把'AND Available Seats> = 4'放在裏面,因爲我們並不關心只要有足夠的席位,可用席位的數量是否已經改變。此更新會在記錄上獲得排它鎖定,因此沒有其他查詢甚至可以選擇它。這解決了併發問題。檢查受影響的行數,看看是否成功保留座位。 –

-1

我會檢查在調用代碼進行預訂之前,可用性是否仍然存在,類似於;

if (functionToCheckAvailability(number_of_seats)) { 
    bookSeats(number_of_seats); 
}