TL; DR - MySQL에서는 테이블을 잠그고 동시에 트랜잭션을 사용할 수 없습니다. 이 주위에 어떤 방법이 있습니까?MySQL : 테이블을 잠그고 트랜잭션을 시작하는 방법은 무엇입니까?
(느린) 외부 시스템의 일부 데이터를 캐시하기 위해 사용하는 MySQL 테이블이 있습니다. 데이터는 웹 페이지 (PHP로 작성)를 표시하는 데 사용됩니다. 캐시 된 데이터가 너무 오래된 것으로 간주 될 때마다 웹 연결 중 하나가 캐시 된 데이터의 업데이트를 트리거해야합니다. 나는 그것을
- 다른 클라이언트 :
내가 처리해야 할 세 가지 문제가 있습니다 일을하고있는 PHP 인스턴스가 언제든지 예기치 않게 종료 될 수 있습니다
- 동시에 그것을 업데이트하고 데이터는
나는 처음과 마지막을 해결할 수있는 손상되어서는 안된다 트랜잭션을 사용하여 문제를 처리하므로 클라이언트는 트랜잭션이 커밋 될 때까지 새 데이터를 즉시 볼 수 있으므로 이전 데이터를 읽을 수 있습니다. 문제가 발생하면 단순히 트랜잭션이 롤백됩니다.
하나의 프로세스 만 업데이트를 수행 할 수 있도록 테이블을 잠그면 두 번째 문제를 해결할 수 있습니다. 다른 프로세스가 잠금을받을 때쯤에 그들은 펀치에 맞고 아무것도 업데이트 할 필요가 없다는 것을 알게 될 것입니다.
즉, 테이블과 테이블을 잠글 필요가 있습니다. MySQL 설명서에 따르면 this is not possible. 트랜잭션을 시작하면 잠금이 해제되고 테이블을 잠그면 활성 트랜잭션이 커밋됩니다.
이 문제를 해결할 수있는 방법이 있습니까? 아니면 내 목표를 달성하기위한 또 다른 방법이 있습니까?
감사합니다. 이것은 잘 작동하는 것 같습니다! – Malvineous