MySQL의 낙관적 잠금: 종합적인 설명
낙관적 잠금은 다음과 같은 경우에 발생할 수 있는 데이터 충돌을 방지하기 위해 데이터베이스 관리 시스템에 사용되는 기술입니다. 여러 사용자가 동일한 데이터를 동시에 업데이트하려고 시도합니다. MySQL은 기본적으로 낙관적 잠금을 지원하지 않지만 표준 SQL 지침을 사용하여 구현할 수 있습니다.
개념 이해
낙관적 잠금은 데이터가 여러 사용자가 자주 수정합니다. 데이터에 대한 잠금을 획득하는 대신 이 기술은 동시 업데이트를 허용하지만 변경 사항을 커밋하기 전에 충돌을 확인합니다.
MySQL에서 구현
낙관적 구현 방법 중 하나 MySQL의 잠금은 테이블에 버전 열을 추가하는 것입니다. 행이 업데이트되면 버전 열이 증가합니다. 업데이트를 커밋하기 전에 애플리케이션은 현재 버전 번호가 업데이트가 시작될 때 행에 저장된 버전 번호와 일치하는지 확인합니다. 숫자가 일치하면 업데이트가 커밋됩니다. 그렇지 않으면 충돌이 발생했으며 애플리케이션이 이를 적절하게 처리해야 합니다.
코드 예
다음 코드 조각은 버전 열을 사용한 낙관적 잠금을 보여줍니다.
-- Select the row and its version
SELECT val1, val2, version
FROM theTable
WHERE iD = @theId;
-- Calculate new values
-- ...
-- Update the table, checking the version
UPDATE theTable
SET val1 = @newVal1,
val2 = @newVal2,
version = version 1
WHERE iD = @theId
AND version = @oldversion;
-- Check for affected rows
IF @@ROWCOUNT = 1
-- Commit the changes
-- ...
ELSE
-- Handle collision
-- ...
END IF;
트랜잭션 대 비트랜잭션
낙관적 잠금은 트랜잭션 유무에 관계없이 구현할 수 있습니다. 트랜잭션을 사용하면 충돌이 발생한 경우 모든 변경 사항을 롤백할 수 있지만 동시성 제한이 발생할 수도 있습니다. 비트랜잭션 낙관적 잠금은 버전 열을 사용하여 충돌을 감지하고 트랜잭션 없이 이를 처리합니다.
결론
낙관적 잠금은 기본 제공되지 않습니다. MySQL의 기능이지만 표준 SQL 명령어를 사용하여 구현할 수 있습니다. 테이블에 버전 열을 추가하면 애플리케이션이 낙관적 잠금을 수행하고 업데이트를 커밋하기 전에 충돌을 감지하여 동시 환경에서 데이터 일관성을 보장할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3