읽기 전용으로 테이블의 행을 잠그려고하지만 다음 코드는 행을 잠그지 않습니다. POST 요청을 통해 code1을 커밋하지 않고 "code1"을 실행 한 다음 "code2"를 실행했습니다. 따라서 각 코드는 고유 한 .php 파일에 있습니다.PDO로 SQL 행을 잠그는 방법
"SELECT ... FOR UPDATE"로 시도해 보았지만 역시 작동하지 않았습니다.
코드 1 :
try{
$pdo->beginTransaction();
$sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;";
$statement = $pdo->query($sql);
var_dump($statement->fetchAll());
}catch(Exception $e){
$pdo->rollBack();
exit('Exception ' . $e->getMessage());
}
CODE2 :
try{
$pdo->beginTransaction();
$sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;";
$statement = $pdo->query($sql);
var_dump($statement->fetchAll());
//New segment starts here:
$sql = "UPDATE statementcontent SET assertedFlags = '4' WHERE id = $statementId;";
$statement = $pdo->exec($sql);
var_dump($statement);
$pdo->commit();
}catch(Exception $e){
$pdo->rollBack();
exit('Exception ' . $e->getMessage());
}
는 코드 1은 잠금이 해제됩니다 종료로 인해 후 잠이 아니라고 할 수 있을까?
편집 나는 1 ~ 2 개 PDO 인스턴스와 파일 잠금이 일이 시간에 모두 넣어. 나는 많은 요청을 할 때 서버가 어떻게 쿼리를 관리하는지 이해하지 못한다. 많은 프로세스 또는 많은 스레드가있을 것입니까? 모든 경우에 대해 또는 많은 스레드의 경우에만 잠긴 상태로 유지됩니까? 감사합니다. . 당신이 보라 잠금 적절한 행에 대해
물론 코드 1을 종료하면 잠금이 해제되기 때문에 잠겨 있지 않습니다. –