根据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 那么,当它处于睡眠状态时,我应该能够在另一个窗口中加载 script.php 并且它应该等到 script.php?l=1 完成,对吗?
事情是,script.php 会立即加载,即使 script.php?l=1 有一个写锁。如果我尝试插入 script.php 那么它会等待,但为什么允许 SELECT 呢?
注意:我不是在寻找关于是否使用 LOCK TABLES 的讨论。事实上,我可能会进行交易,我现在正在调查,现在我只想了解为什么上述方法不起作用。