http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html에 따르면, mysql에서 쓰기위한 테이블을 잠그면 다른 누구도 잠금이 해제 될 때까지 액세스 할 수 없습니다. 내가로드,이 스크립트를 작성하거나이 script.php 또는이 script.php 리터 당신이 원하는 무슨에 따라 = 1과 :?LOCK TABLES [table] WRITE가 테이블 읽기를 방지하지 않는 이유는 무엇입니까?
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이 완료 될 때까지 기다려야합니다. 맞습니까?
것은 L = 1은 쓰기 잠금이있는 경우에도이 script.php? 바로,이 script.php로드입니다. script.php에 삽입하려고하면 기다리지 만 왜 SELECT가 허용됩니까?
참고 : 내가 LOCK 테이블을 사용할지 여부에 대한 논의를 찾고 있지 않다. 사실 나는 아마도 거래를 할 것입니다. 지금 조사 중입니다. 지금 당장은 왜 위의 방식이 효과가 없는지 이해하고 싶습니다.
이 당신의 PHP 공유 MySQL의 연결을 사용하도록 설정 될 수 있습니다 :
이
은 선택에 "SQL_NO_CACHE"키워드를 추가하여 방지 할 수 있습니다? – Barmar확인 하겠지만, 그렇다면 왜 INSERT 지연이 발생하지만 SELECT는 그렇지 않습니까? –
방금 mysql> 명령 프롬프트에서 시도해 보았습니다. 예상대로 잠금이 작동했습니다. – Barmar