>  기사  >  데이터 베이스  >  비관적 잠금과 낙관적 잠금에 대한 간략한 설명

비관적 잠금과 낙관적 잠금에 대한 간략한 설명

(*-*)浩
(*-*)浩앞으로
2019-09-05 16:00:222520검색

비관적 잠금, 이름에서 알 수 있듯이 매우 비관적입니다. 데이터를 얻으러 갈 때마다 다른 사람들이 수정할 것 같아서 데이터를 얻을 때마다 잠급니다. 이런 방식으로 다른 사람이 데이터를 얻으려고 하면 잠금을 얻을 때까지 차단됩니다. 이러한 많은 잠금 메커니즘은 행 잠금, 테이블 잠금, 읽기 잠금, 쓰기 잠금 등과 같은 기존 관계형 데이터베이스에서 사용되며 작업 전에 모두 잠깁니다.

비관적 잠금과 낙관적 잠금에 대한 간략한 설명

가장 일반적으로 사용되는 것은 업데이트를 위한 선택입니다. 이는 선택 항목의 결과 행을 잠그고 제출하는 행 잠금입니다. 또는 다른 트랜잭션에서는 롤백하기 전에 이러한 행에 대해 업데이트, 삭제 또는 업데이트 작업을 수행할 수 없습니다.

Optimistic Lock, 이름에서 알 수 있듯이 매우 낙관적입니다. 데이터를 얻으러 갈 때마다 다른 사람들이 수정하지 않을 것이라고 생각합니다. 기간 이 데이터는 다른 사람이 마음대로 읽을 수 있지만 업데이트할 때 이 기간 동안 다른 사람이 데이터를 업데이트했는지 여부를 판단하고 버전 번호와 같은 메커니즘을 사용할 수 있습니다.

버전 번호 메커니즘은 낙관적 잠금에서 가장 일반적으로 사용되는 방법입니다. 업데이트하기 전에 버전 번호 필드를 테이블에 추가하여 버전 번호를 얻은 다음 다음과 같이 업데이트합니다. 업데이트 문의 조건은 버전 번호를 얻은 후 업데이트하기 전에 데이터가 변경되었으며 마지막으로 업데이트된 데이터가 0개이므로 업데이트가 실패하는 경우입니다. 업데이트가 실패했으며 동시성 문제가 발생했음을 의미합니다. 그런 다음 특정 처리를 수행합니다.

예를 들어 두 사람이 동시에 특정 데이터를 수정하는 경우 프로세스는 다음과 같습니다.

운영자 A는 다음과 같이 작동합니다.

select id, balance, version from table where id=“1”;
# 🎜🎜#쿼리 결과: id =1, Balance=1000, version=1

update table set balance=balance+100, version=version+1 where id=“1” and version=1;

실행 후 반환된 업데이트 결과는 1이며, 이는 데이터베이스의 결과가 하나임을 나타냅니다. : id=1, Balance=1100, version= 2

Operator B는 다음과 같이 작동합니다:

select id, balance, version from table where id=“1”;

쿼리 결과: id=1, Balance=1000, version=1, 이는 운영자 A가 아직 수정하지 않았음을 나타냅니다.

update table set balance=balance-50, version=version+1 where id=“1” and version=1 ;

확인해보니 운영자 A가 아직 수정하지 않은 상태입니다. 업데이트 시점이 되면 운영자 A가 먼저 수정에 성공했으니 데이터베이스의 실제 값은 id=1, Balance 입니다. =1100, version=2 ,

운영자 B도 버전 번호를 1씩 높이고(version=2) 데이터베이스에 데이터를 제출(balance=950)하려고 시도했지만 이때 id는 ="1" 및 version=1 데이터

을 찾을 수 없어 업데이트가 실패했으며, 실행 결과는 0으로, 성공적으로 업데이트된 데이터가 없음을 나타냅니다.

지금 다시 확인해 보세요. 결과는 여전히 연산자 A가 작업을 완료한 이후의 결과입니다

id="1"인 테이블에서 id, 잔액, 버전을 선택하세요.#🎜 🎜 #

쿼리 결과: id=1, Balance=1100, version=2

위는 버전 번호 메커니즘을 직접 구현하는 원칙입니다. 사용되는 실제 버전 번호 메커니즘은 다음과 같습니다. 데이터베이스 자체에서 제공하는 메커니즘입니다. 업데이트된 버전 번호가 최신이 아닌 것으로 확인되면 거부됩니다.

위 내용은 비관적 잠금과 낙관적 잠금에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제