我无法让表锁定在 MySQL 中。我尝试通过在不同浏览器上同时运行两个脚本来测试并发请求。
脚本 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 应该等待 30+ 秒,直到脚本 1 解锁表,然后输出更新的 ID。但是它立即输出了原来的ID,所以锁显然没有生效。可能出了什么问题?
顺便说一句,我知道我不应该仍然使用 mysql_*,但我现在坚持使用它。
编辑:我发现锁定确实发生在实时站点上,但不是在我的开发站点上。它们都在共享主机上,所以我假设两者之间存在一些不同的设置。知道那可能是什么吗?