집 >데이터 베이스 >MySQL 튜토리얼 >mysql 데이터베이스 잠금이란 무엇입니까?
MySQL 데이터베이스의 잠금은 다음과 같습니다. 1. 데이터 읽기를 의미하는 공유 잠금 2. 데이터 쓰기를 의미하는 배타적 잠금 3. 레코드 행을 잠그고 하나의 레코드에만 영향을 미치는 행 잠금 , 의도 잠금 - 트랜잭션의 다음 행에 대해 요청될 잠금 유형을 표시하기 위한 것입니다.
mysql 데이터베이스 잠금
1. 공유 잠금(공유 잠금, S 잠금이라고도 함)
공유 잠금(S)은 데이터에 대한 읽기 작업을 나타냅니다. 따라서 여러 트랜잭션이 동시에 개체에 공유 잠금을 추가할 수 있습니다.
공유 잠금을 생성하는 SQL 문:
select * from ad_plan lock in share mode;
2. 배타적 잠금(배타적 잠금, X 잠금이라고도 함)
배타적 잠금은 데이터를 쓰는 것을 의미합니다. 트랜잭션이 객체에 배타적 잠금을 추가하면 다른 트랜잭션은 해당 객체에 더 이상 잠금을 추가할 수 없습니다.
배타적 잠금을 생성하는 SQL 문:
select * from ad_plan for update;
3. 행 잠금(Row Lock)
한 행의 레코드를 잠그고 하나의 레코드에만 영향을 줍니다.
보통 INSERT, UPDATE, DELETE 등 DML 문에서 사용됩니다.
InnoDB 행 잠금은 인덱스의 항목을 잠그는 방식으로 구현됩니다. 이는 데이터 블록에서 해당 데이터 행을 잠그는 방식으로 구현되는 MySQL 및 Oracle과 다릅니다.
InnoDB의 행 잠금 구현 기능은 InnoDB가 인덱스 조건을 통해 데이터를 검색할 때만 행 수준 잠금을 사용한다는 것을 의미합니다. 그렇지 않으면 InnoDB는 테이블 잠금을 사용합니다!
4. 의도 잠금
의도 잠금은 주로 트랜잭션의 다음 행에 대해 요청되는 잠금 유형을 표시하는 것입니다. InnoDB에는 두 가지 테이블 잠금이 있습니다.
Intention Shared Lock(IS): 트랜잭션이 데이터 행에 공유 잠금을 추가할 준비를 하고 있음을 나타냅니다. 즉, 데이터 행은 테이블을 추가하기 전에 먼저 테이블의 IS 잠금을 획득해야 함을 의미합니다.
의도 배타적 잠금(IX): 위와 유사하게 트랜잭션이 데이터 행에 배타적 잠금을 추가할 준비를 하고 있음을 의미하며, 이는 배타적 잠금을 추가하기 전에 먼저 테이블의 IX 잠금을 획득해야 함을 나타냅니다. 데이터 행을 잠급니다.
의도 잠금은 InnoDB에 의해 자동으로 추가되며 사용자 개입이 필요하지 않습니다.
INSERT, UPDATE 및 DELETE의 경우 InnoDB는 일반 SELECT 문에 관련된 데이터에 자동으로 배타적 잠금을 추가하고 InnoDB는 잠금을 추가하지 않으며 트랜잭션은 다음 문을 통해 공유 잠금 또는 배타적 잠금을 명시적으로 추가할 수 있습니다.
공유 잠금: SELECT … 공유 모드 잠금;
독점 잠금: SELECT … FOR UPDATE;
잠금 수준
MySQL에는 잠금 수준이나 밀도에 따라 세 가지 수준이 있습니다. 수준, 테이블 수준, 행 수준.
(1) 테이블 수준 잠금
은 오버헤드가 낮고 잠금이 빠릅니다. 잠금 세분성이 크고 잠금 충돌 가능성이 가장 높으며 동시성이 가장 낮습니다.
(2) 행 수준 잠금
은 비용이 많이 들고 교착 상태가 발생할 수 있습니다. 잠금 세분성은 가장 작고 잠금 충돌 가능성은 가장 낮으며 동시성은 가장 높습니다.
(3) 페이지 잠금
비용과 잠금 시간은 테이블 잠금과 행 잠금 사이에 있습니다. 교착 상태는 테이블 잠금과 행 잠금 사이에 발생하며 동시성은 평균입니다.
위 내용은 mysql 데이터베이스 잠금이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!