MySQL でテーブルをロックするのに問題があります。異なるブラウザーで 2 つのスクリプトを同時に実行して、同時要求をテストしてみました。
スクリプト 1:
mysql_query("lock tables id_numbers write");
$sql = "select number from id_numbers";
$result = mysql_query($sql);
if ($record = mysql_fetch_array($result))
{
$id = $record['number'];
}
sleep(30);
$id++;
$sql = "update id_numbers set number = '$id'";
$result = mysql_query($sql);
mysql_query("unlock tables");
スクリプト 2:
$sql = "select number from id_numbers";
$result = mysql_query($sql);
if ($record = mysql_fetch_array($result))
{
$id = $record['number'];
}
echo $id;
最初にスクリプト 1 を開始し、次にスクリプト 2 を開始します。理論的には、スクリプト 2 は、スクリプト 1 がテーブルのロックを解除するまで 30 秒以上待機してから、更新された ID を出力する必要があります。ただし、すぐに元の ID が出力されるため、ロックは明らかに有効ではありません。何がうまくいかないのですか?
ところで、私はまだ mysql_* を使用すべきではないことを知っていますが、今のところそれで立ち往生しています。
編集:ライブ サイトではロックが発生するが、私の開発サイトでは発生しないことがわかりました。それらは両方とも共有ホスト上にあるため、2 つの間に異なる設定があると想定しています。それが何であるか考えていますか?