我在获取表以锁定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_*,但我现在被它卡住了。
编辑:我发现锁定确实发生在活动站点上,但不是在我的开发站点上。它们都在共享主机上,所以我假设两者之间有一些不同的设置。你知道那会是什么吗?
发布于 2012-11-04 12:46:06
使用这里的代码,我得到了您所期望的行为:脚本2将阻塞,直到脚本1发出unlock tables。
你的问题一定出在别的地方。要检查的事项:
mysql_query()返回值,如果得到任何FALSE返回,请使用mysql_error()。)https://stackoverflow.com/questions/13215632
复制相似问题