gpt4 book ai didi

php - 为什么 LOCK TABLES [table] WRITE 不阻止表读取?

转载 作者:行者123 更新时间:2023-12-04 02:47:38 24 4
gpt4 key购买 nike

根据 http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html如果我锁定一个表以便在 mysql 中写入,那么在它被解锁之前没有其他人可以访问。我写了这个脚本,加载为 script.php 或 script.php?l=1 取决于你想做什么:

if ($_GET['l'])
{
mysqli_query("LOCK TABLES mytable WRITE");
sleep(10);
mysqli_query("UNLOCK TABLES");
}
else
{
$res=mysqli_query("SELECT * FROM mytable");
// Print Result
}

如果我在一个浏览器窗口中加载 script.php?l=1 然后,当它处于 sleep 状态时,我应该能够在另一个窗口中加载 script.php 并且它应该等到 script.php?l=1 完成,正确的?

事实是,script.php 会立即加载,即使 script.php?l=1 有写锁。如果我尝试在 script.php 中插入,它会等待,但为什么允许 SELECT?

注意:我不是要讨论是否使用 LOCK TABLES。事实上,我可能会进行交易,我正在对此进行调查,现在我只想了解为什么上述方法不起作用。

最佳答案

发生这种情况是因为查询缓存。存在不“影响”锁定的可用缓存结果,因此返回结果。

这可以通过在选择中添加“SQL_NO_CACHE”关键字来避免:

SELECT SQL_NO_CACHE * FROM mytable

关于php - 为什么 LOCK TABLES [table] WRITE 不阻止表读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com