고급 기능 - 데이터베이스 잠금 작업
데이터베이스는 여러 사용자가 동시에 데이터에 액세스하는 경우 여러 트랜잭션이 데이터베이스에서 동시에 동일한 데이터에 액세스하는 경우입니다. 데이터 읽기 및 저장이 잘못되어 데이터베이스의 데이터 일관성이 손상될 수 있습니다. 따라서 잠금은 데이터베이스 동시성 제어를 달성하는 데 매우 중요한 기술입니다.
#🎜🎜 #데이터베이스 잠금 프로세스는 다음과 같습니다. 트랜잭션이 데이터 객체에 대해 작동하기 전에 먼저 시스템에 잠금 요청을 보냅니다. 잠긴 트랜잭션은 데이터 객체에 대한 특정 제어권을 갖습니다. 잠금이 해제되기 전에는 다른 트랜잭션이 이 데이터 객체를 업데이트할 수 없습니다. 🎜🎜# 따라서 JDBC 모듈은 IDBLocker 라고 하는 데이터베이스 쿼리 작업의 데이터베이스 레코드 잠금에 대한 제어 기능을 통합하며 매개변수 형식으로도 사용하기가 동일합니다!
먼저 IDBLocker에서 제공하는 잠금 유형을 이해하세요.
- MySQL:
- IDBLocker. MYSQL: 행 수준 잠금, 정규화된 데이터만 잠기고 다른 프로세스는 작동하기 전에 리소스가 잠금 해제될 때까지 기다립니다. #
IDBLocker.ORACLE_NOWAIT: 행 수준 잠금, 결과 집합의 일부 데이터가 잠겨 있는 한 리소스 대기 없음, "ORA -00054 오류"가 즉시 반환됩니다.IDBLocker.ORACLE: 행 수준 잠금, 정규화된 데이터만 잠깁니다. 다른 프로세스는 작동하기 전에 리소스가 잠금 해제될 때까지 기다립니다.
SQL Server:# 🎜🎜#IDBLocker.SQLSERVER_NOLOCK: 잠금 없음 , 데이터를 읽거나 수정할 때 잠금 없음 IDBLocker.SQLSERVER_HOLDLOCK: 잠금을 유지하고 이 공유 잠금을 사용하여 도중에 해제하지 않고 전체 트랜잭션이 끝날 때까지 유지합니다. 🎜🎜#IDBLocker.SQLSERVER_UPDLOCK: 잠금을 수정하면 여러 프로세스가 동시에 데이터를 읽을 수 있지만 이 프로세스만 데이터를 수정할 수 있습니다.
IDBLocker.SQLSERVER_TABLOCK: 테이블 잠금, 전체 테이블은 명령이 끝날 때까지 공유 잠금을 설정하여 다른 프로세스가 데이터를 읽을 수만 있고 수정할 수 없도록 합니다. #🎜 🎜#- IDBLocker. SQLSERVER_TABLOCKX: 다른 프로세스가 테이블의 데이터를 읽거나 수정하지 못하도록 전체 테이블에 배타적 잠금을 설정하는 배타적 테이블 잠금
# 🎜🎜#
기타 데이터베이스:
은 IDBLocker 인터페이스를 통해 직접 구현할 수 있습니다.사용 방법을 보여주세요. 샘플 코드를 통한 잠금:
샘플 코드 1: EntitySQL 개체를 통해 잠금 매개 변수 전달
session.find(EntitySQL.create(User.class) .field(Fields.create(User.FIELDS.ID, User.FIELDS.USER_NAME).excluded(true)) .forUpdate(IDBLocker.MYSQL));
#🎜 🎜#Sample 코드 2: Select 쿼리 객체를 통해 잠금 매개변수를 전달합니다. #:
주의해서 사용하세요. 데이터베이스 잠금 메커니즘을 사용하세요. 교착 상태를 방지하려면 테이블 잠금을 피하세요!