MySQL 잠금 트랜잭션 격리 수준 및 응용
데이터베이스에서 트랜잭션 격리 수준은 동시 트랜잭션 간의 격리 정도를 결정하는 매우 중요한 개념입니다. MySQL은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ 및 SERIALIZABLE의 네 가지 트랜잭션 격리 수준을 제공합니다. 트랜잭션 격리 수준마다 데이터 읽기 및 쓰기에 대한 잠금 전략이 다르므로 애플리케이션에서 적절한 트랜잭션 격리 수준을 올바르게 선택하고 사용하는 것이 중요합니다.
다음은 특정 코드 예제를 사용하여 다양한 트랜잭션 격리 수준에서 잠금 전략을 보여줍니다.
먼저 테스트 테이블을 만듭니다.
CREATE TABLE test_table ( id INT PRIMARY KEY, name VARCHAR(100), age INT );
그런 다음 다양한 트랜잭션 격리 수준에서 잠금 전략을 보여줍니다.
READ UNCOMMITTED:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
이 예에서 트랜잭션 1은 수정되었지만 트랜잭션 2에 의해 커밋되지 않은 데이터를 읽습니다.
READ COMMITTED:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
이 예에서 트랜잭션 1은 트랜잭션 2가 제출한 데이터만 읽을 수 있습니다.
REPEATABLE READ:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
이 예에서 트랜잭션 1은 데이터를 읽을 때 공유 잠금을 추가하고 트랜잭션 2는 실행되기 전에 트랜잭션 1이 공유 잠금을 해제할 때까지 기다립니다.
SERIALIZABLE:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
이 예에서 트랜잭션 1은 데이터를 읽을 때 공유 잠금을 추가하고 트랜잭션 2는 실행되기 전에 트랜잭션 1이 공유 잠금을 해제할 때까지 기다립니다.
위의 코드 예제를 통해 다양한 트랜잭션 격리 수준에서 잠금 전략이 어떻게 작동하는지 확인할 수 있습니다. 실제 애플리케이션 개발에서는 특정 비즈니스 시나리오 및 성능 요구 사항에 따라 선택할 수 있는 적절한 트랜잭션 격리 수준을 선택하는 것이 매우 필요합니다.
위 내용은 MySQL 잠금, 트랜잭션 격리 수준 및 애플리케이션 간의 관계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!