2011-03-21 3 views
1

기본적으로 "cron"과 같은 작업이 포함 된 MySQL DB에 테이블이 있습니다. 기본적으로 사용자가 페이지를 방문하고 스크립트 (php)가 DB cron 테이블을 검사하고 "사용 가능한"최신 5 개의 결과를 가져오고 작업과 관련된 스크립트를 실행합니다.MySQL 선택이 어떻게 방해받지 않도록 보장할까요?

현재 내가 예상하는 문제는 2 명의 사용자가 동일한 작업을 수행 할 수 있다는 것입니다. 현재 현재 5 개의 작업을 현재 사용자에게 할당하는 UPDATE 쿼리를 실행합니다. 그 후 SELECT 쿼리를 수행하여 현재 사용자에게 5 개의 작업을 할당하고 hes가 완료되면 완료된 작업으로 표시합니다.

이론적으로 2 명의 사용자가 동일한 작업을 수행 할 수는 없지만 확실하지 않습니다. 나는 MySQL이 아마도 이것을 보장하는 메커니즘을 가지고 있는지 또는 그것에 대해 알려진 메소드가 있는지 궁금해한다.

감사합니다.

답변

1

Transactions을 사용하려고합니다. 이렇게하면 [UPDATE, SELECT, UPDATE]와 같은 다단계 작업이 완전히 완료되거나 전혀 수행되지 않도록 할 수 있습니다.

이것은 고전적인 concurrency 문제입니다. 사용자가 원리를 이해할 수 있도록 일반적인 동시성 및 트랜잭션에 대해 읽는 것이 좋습니다. 이렇게하면 줄 바꿈 문제를 피할 수 있습니다 (동시성에 많은 문제가 있습니다!).

+0

감사합니다. 트랜잭션에 대해 읽었으며 모든 쿼리가 완료되지 않으면 데이터가 커밋되지 않을 수 있음을 알 수 있습니다. 다른 사용자가 같은 DB 결과를받지 못하게하는 방법을 모르겠다. 다른 사용자가 현재 동일한 결과로 작업하고 있는지 확인할 방법이 없습니다. – Naatan

+1

Hello Naatan, 테이블 잠금에 관한 mysql 매뉴얼을 읽어 보면 도움이 될 것입니다. – julioc

+1

커밋되지 않은 변경 사항이 있으면 데이터베이스는 영향을받은 행이나 테이블에 잠금을 설정합니다. 잠금은 변경 사항이 확약 될 때까지 해당 오브젝트의 추가 읽기 및 쓰기를 방지합니다. –

관련 문제