Согласно 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 или нет. На самом деле я, вероятно, собираюсь пойти с транзакцией, я сейчас исследую это, прямо сейчас я просто хочу понять, почему вышеизложенное не работает.
mysql>
, и блокировка сработала так, как вы ожидали. - person Barmar   schedule 02.09.2013