2012-04-30 10 views
1

宴会でテーブルシートを選択するためのphp/MYSQL Webサイトがあります。 10席が奪われたら、テーブルはもう利用できません。 2人以上の学生が同時に座席を予約するのを防ぐにはどうすればいいですか?& 3人まで同時に予約できますか? 2人の学生が同時に入場すると、同じテーブルで座席を予約しようとすると、データが壊れてしまったり、10人以上の座席が割り当てられたりする可能性があります。 2人目のユーザーが自分の選択を書く前に、テーブルの席を最初に予約しようとすると、データベースに書き込むことができます。どんな助けもありがとう。同時ユーザーによるMYSQLデータの上書きの防止

答えて

1

以前の読み取りから得た7

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

ような何かを行います。このアップデートが失敗した場合、その間に他の誰かが座席を割り当てられたことを知っています。

+0

+1この解決策は機能します。しかし、4席を予約しようとしている場合は、利用可能な席が十分にある限り、利用可能な席の数が変更されているかどうかは実際には気にしないので、 'AND AvailableSeats> = 4'とします。この更新プログラムはレコードを排他的にロックするため、他のクエリでレコードを選択することはできません。これは並行性の問題を解決します。影響を受けた行の数を確認して、シートを正常に予約したかどうかを確認します。 –

-1

予約をするコードを呼び出す直前に空きがあるかどうかを確認します。

if (functionToCheckAvailability(number_of_seats)) { 
    bookSeats(number_of_seats); 
} 
関連する問題