私は現在、簡単なオークションサイトに取り組んでいます。'bids'と呼ばれる独自のMySQLテーブルに入札単価を保存しています。同じ入札の2つがまったく同時に送信されないようにするための最良の方法は何でしょうか。
提出された入札が実際に最高入札であることを確認するための私の現在の戦略は、(例として)次のことを行うことです。
$sql = "SELECT * FROM bids WHERE amount >= '".$bidamount."'";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 0) {
$sql = "INSERT INTO bids SET amount = '".$bidamount."'";
mysql_query($sql);
$bidid = mysql_insert_id();
}
上記の一連のクエリの問題は、SELECTクエリが実行されてからINSERTクエリが実行されるまでの間に、別のユーザーが同じ入札単価を挿入する可能性があることです。
SELECT中にテーブルをロックして、この二重入札が発生しないようにする方法はありますか?このような目的でテーブルをロックすることに関する私の主な懸念は、一度に多くの人が入札する場合のパフォーマンスの問題です。