>데이터 베이스 >MySQL 튜토리얼 >기본 지원 없이 MySQL에서 낙관적 잠금을 어떻게 구현할 수 있습니까?

기본 지원 없이 MySQL에서 낙관적 잠금을 어떻게 구현할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 21:53:02728검색

How Can You Implement Optimistic Locking in MySQL Without Native Support?

MySQL의 낙관적 잠금: 자세히 살펴보기

데이터베이스에서 동시 업데이트를 관리하는 데 사용되는 기술인 낙관적 잠금은 기본적으로 지원되지 않습니다. MySQL로. 그러나 데이터베이스 방식과 애플리케이션 코드의 조합을 통해 구현할 수 있습니다.

낙관적 잠금 작동 방식

낙관적 잠금의 기본 원칙은 데이터가 동시 업데이트 중 충돌이 발생합니다. 업데이트하기 전에 데이터 무결성을 확인함으로써 충돌을 감지하고 적절한 조치를 취할 수 있습니다.

트랜잭션이 없는 경우 UPDATE 전에 추가 SELECT 문을 포함하여 낙관적 잠금이 적용됩니다. 이 SELECT 문은 데이터의 현재 상태를 검색한 다음 업데이트를 시도하기 전의 상태와 비교합니다. 데이터가 변경된 경우 업데이트가 중단되어 데이터 무결성이 유지됩니다.

MySQL에서 낙관적 잠금 사용

MySQL에서 낙관적 잠금을 구현하려면 다음 단계를 수행할 수 있습니다. 애플리케이션 코드에서 수행:

  1. SELECT 문을 실행하여 데이터의 현재 상태를 검색합니다.
  2. 데이터에 대한 계산 또는 기타 작업을 수행합니다.
  3. UPDATE 실행 문을 사용하여 낙관적 잠금 기준(예: WHERE COLUMN_NAME = @OLD_VALUE)으로 데이터를 업데이트합니다.
  4. UPDATE 문 이후 영향을 받는 행 수를 확인하세요. 0이면 데이터가 변경되어 충돌을 나타내며 업데이트가 중단될 수 있습니다.

다음 예를 고려하세요.

<code class="sql">SELECT val1, val2 FROM theTable WHERE iD = @theId;

-- Perform data calculations

UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2
WHERE iD = @theId
AND val1 = @oldVal1
AND val2 = @oldVal2;

-- Check the number of affected rows
IF @@ROWCOUNT = 1
-- Update successful
ELSE
-- Conflict detected
END</code>

대체 낙관적 잠금 방법

SELECT-UPDATE-CHECK 접근 방식 외에도 낙관적 잠금은 버전 열을 사용하여 구현할 수도 있습니다. 이 열은 데이터가 업데이트될 때마다 증가하며 UPDATE 문은 행을 업데이트하기 전에 버전을 확인합니다. 버전이 일치하지 않으면 업데이트가 중단됩니다.

고려사항

낙관적 잠금은 충돌이 거의 발생하지 않으며 충돌을 감지하는 비용이 비관적 잠금을 사용하는 것보다 낮다고 가정합니다. 잠금(예: 트랜잭션을 통해) 그러나 동시성이 높고 데이터 무결성이 중요한 시나리오에는 적합하지 않을 수 있습니다.

위 내용은 기본 지원 없이 MySQL에서 낙관적 잠금을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.