2017-12-09 3 views
1

반드시 다음 PHP에서 multi_query입니다. 다른 프로세스가 가로 채고 교착 상태가 발생할 수 있습니다.는 다음과 같은 예를 감안할 때

MySQL은 다른 프로세스를 거치지 않고 실행되도록 보장합니까?

거래/잠금 장치를 제안하지 마십시오. 이 질문은 multi_query와 그 특성에 관한 것입니다. PHP에서

예제 코드 :

물론
$query = "SELECT * FROM `table`;"; 
$query .= "INSERT INTO `table` SET `x` = 'y' WHERE `x` = 2;"; 
$mysqli->multi_query($query); 
+1

거래에서보세요 잠금 및 가능성 거래, 그들은 당신의 INSERT가 추가 한 후 데이터를 선택하고 단지 경우라면, –

+0

을 당신을 도울 INSERT로 보일 수 있습니다 ... 둘을 결합하는 SELECT 문. 항상 가능한 것은 아니지만 관련성이있는 경우 유용한 도구입니다. –

+0

* 다른 프로세스가 가로 채고 교착 상태가 발생할 수 있습니다. * 첫 번째 쿼리를 통해 테이블 ​​수준 쓰기 잠금을 획득하면 다른 프로세스가 얼마나 간섭합니까? –

답변

1

없음. 그것은 다른 모든 세계를 기다릴 수 있다면 다중 쿼리를 사용하는 사이트의 지옥을 만들 것입니다.

당신이 찾고있는 것은

+0

내 질문이 너무 구체적 일 수 있습니다. 트랜잭션 및/또는 잠금 문제를 해결하는 방법을 알고 있습니다. 그러나, 내 질문에 특히 이러한 쿼리를 후속 또는 아닙니다 mysql 처리에 관한 것입니다. 답을 찾을 수있는 소스가 있습니까? –

+0

어서, 임마. 쿼리가 이어지는 지 확인하려면 테이블을 잠 가야합니다. ** 당신의 환상에 대한 근원이 있습니까 **? 다중 쿼리가 실행중인 모든 테이블에 잠금을 설정한다고 말하는 남자의 문장이 하나 있습니까? –

+0

나는 자물쇠에 대해서 말하고 있지 않다. 후속되는 쿼리와 테이블 잠금은 완전히 다른 두 가지 작업입니다. 쓰기 잠금이 설정된 테이블을 잠그면 쓰기를 시도하는 다른 모든 연결이 보류 상태라는 보장이 있습니다. 그러나, 다른 연결 잘 다른 테이블에 선택을 발급 할 수 있습니다 (출처 : 시도 자신). 그러나, 내가 찾고있는 것은 서버가 임의의 양의 쿼리를 서버에 보내어 다른 서버와의 연결을 통해 쿼리를 전달할 수 없다는 것입니다. 어쩌면 multi_query 대답이지만이 신뢰할 수있는 설명서를 찾을 수 없습니다 –

관련 문제