비관적 잠금, 이름에서 알 수 있듯이 매우 비관적입니다. 데이터를 얻으러 갈 때마다 다른 사람들이 수정할 것 같아서 데이터를 얻을 때마다 잠급니다. 이런 방식으로 다른 사람이 데이터를 얻으려고 하면 잠금을 얻을 때까지 차단됩니다. 이러한 많은 잠금 메커니즘은 행 잠금, 테이블 잠금, 읽기 잠금, 쓰기 잠금 등과 같은 기존 관계형 데이터베이스에서 사용되며 작업 전에 모두 잠깁니다.
가장 일반적으로 사용되는 것은 업데이트를 위한 선택입니다. 이는 선택 항목의 결과 행을 잠그고 제출하는 행 잠금입니다. 또는 다른 트랜잭션에서는 롤백하기 전에 이러한 행에 대해 업데이트, 삭제 또는 업데이트 작업을 수행할 수 없습니다.
Optimistic Lock, 이름에서 알 수 있듯이 매우 낙관적입니다. 데이터를 얻으러 갈 때마다 다른 사람들이 수정하지 않을 것이라고 생각합니다. 기간 이 데이터는 다른 사람이 마음대로 읽을 수 있지만 업데이트할 때 이 기간 동안 다른 사람이 데이터를 업데이트했는지 여부를 판단하고 버전 번호와 같은 메커니즘을 사용할 수 있습니다.
버전 번호 메커니즘은 낙관적 잠금에서 가장 일반적으로 사용되는 방법입니다. 업데이트하기 전에 버전 번호 필드를 테이블에 추가하여 버전 번호를 얻은 다음 다음과 같이 업데이트합니다. 업데이트 문의 조건은 버전 번호를 얻은 후 업데이트하기 전에 데이터가 변경되었으며 마지막으로 업데이트된 데이터가 0개이므로 업데이트가 실패하는 경우입니다. 업데이트가 실패했으며 동시성 문제가 발생했음을 의미합니다. 그런 다음 특정 처리를 수행합니다.
예를 들어 두 사람이 동시에 특정 데이터를 수정하는 경우 프로세스는 다음과 같습니다.
운영자 A는 다음과 같이 작동합니다.
select id, balance, version from table where id=“1”;
update table set balance=balance+100, version=version+1 where id=“1” and version=1;
select id, balance, version from table where id=“1”;
update table set balance=balance-50, version=version+1 where id=“1” and version=1 ;
쿼리 결과: id=1, Balance=1100, version=2
위는 버전 번호 메커니즘을 직접 구현하는 원칙입니다. 사용되는 실제 버전 번호 메커니즘은 다음과 같습니다. 데이터베이스 자체에서 제공하는 메커니즘입니다. 업데이트된 버전 번호가 최신이 아닌 것으로 확인되면 거부됩니다.
위 내용은 비관적 잠금과 낙관적 잠금에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!