"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > MySQL에서 낙관적 잠금을 어떻게 구현할 수 있나요?

MySQL에서 낙관적 잠금을 어떻게 구현할 수 있나요?

2024-11-04에 게시됨
검색:353

How can I implement Optimistic Locking in MySQL?

MySQL의 낙관적 잠금 이해

낙관적 잠금은 여러 사용자가 하나의 시스템에서 동일한 데이터를 업데이트하려고 할 때 충돌을 방지하는 데 도움이 되는 프로그래밍 방식입니다. 데이터 베이스. MySQL은 기본적으로 낙관적 잠금을 지원하지 않지만 표준 SQL 문을 사용하여 구현할 수 있습니다.

낙관적 잠금 구현

일반적으로 낙관적 잠금은 알려진 메커니즘을 통해 달성됩니다. 버전 확인으로. 여기에는 데이터가 처음 검색된 이후 다른 사용자가 데이터를 수정했는지 확인하는 작업이 포함됩니다. 이 검사는 업데이트를 적용하기 전에 수행되어 최신 버전의 데이터가 수정되고 있는지 확인합니다.

낙관적 잠금 구현 단계

MySQL에서 낙관적 잠금을 구현하려면 , 다음 단계를 따를 수 있습니다.

  1. 데이터 선택: SELECT 문을 사용하여 업데이트할 데이터를 검색합니다.
  2. 업데이트된 값 계산: 필요한 계산을 수행하여 데이터의 업데이트된 값을 결정합니다.
  3. 버전 확인으로 데이터 업데이트: UPDATE 문을 사용하여 데이터를 업데이트하되 확인하는 WHERE 절을 포함합니다. 현재 버전의 데이터가 1단계에서 검색된 버전과 일치하는 경우.
  4. 영향을 받는 행 확인: UPDATE 문을 실행한 후 영향을 받는 행 수를 확인합니다(예: SELECT ROW_COUNT( )). 하나의 행이 영향을 받았다면 업데이트가 성공한 것입니다.
  5. 충돌 처리: 영향을 받은 행이 0개라면 다른 사용자가 데이터를 수정했다는 의미입니다. 오류 메시지를 표시하거나 데이터베이스에서 데이터를 새로 고치는 등 애플리케이션 로직에서 이 충돌을 적절하게 처리하십시오.

다음은 예입니다. MySQL에서 낙관적 잠금 구현:

# Select data
SELECT id, name, version
FROM users
WHERE id = 1;

# Calculate updated values
new_name = 'John Doe'
new_version = version   1

# Update data with version check
UPDATE users
SET name = @new_name,
    version = @new_version
WHERE id = 1
  AND version = @old_version;

# Check affected rows
SELECT ROW_COUNT() AS affected_rows;

# Handle conflict
IF affected_rows = 0
  BEGIN
    -- Conflict occurred
    -- Handle the conflict here
  END;
ELSE
  BEGIN
    -- Update successful
    -- Continue with the application logic
  END;

버전 확인의 대안

버전 확인 외에도 낙관적 잠금을 구현하기 위한 다음과 같은 다른 대안이 있습니다:

  • 타임스탬프 확인: 타임스탬프 열을 사용하여 데이터 수정을 확인합니다.
  • 필드 비교: 데이터의 특정 필드를 비교하여 변경 사항을 감지합니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3