오픈소스 관계형 데이터베이스 관리 시스템
X | IX | S | IS | |
---|---|---|---|---|
X | Conflict | Conflict | Conflict | Conflict |
IX | Conflict | Compatible | Conflict | Compatible |
S | Conflict | Conflict | Compatible | Compatible |
IS | Conflict | Compatible | Compatible | Compatible |
행 읽기를 위한 공유 가능 잠금
S-lock
을 동시에 획득할 수 있음X-lock
이 걸려있다면 풀릴 때까지 대기해야 함행 쓰기를 위한 베타적 잠금
S-lock
이나 X-lock
이 걸려있다면 풀릴 때까지 대기해야 함테이블의 행에 X-lock
혹은 X-lock
을 획득할 의도를 표현하기 위한 잠금 (multiple granularity locking)
S-lock
을 획득하기 위해서는, 테이블의 SI-lock
혹은 더 강한 잠금을 가져야만 함X-lock
을 획득하기 위해서는, 테이블의 XI-lock
을 가져야만 함인덱스 레코드에 거는 잠금
인덱스 레코드들 간 간격에 거는 잠금
(negative infinity, 10]
(10, 11]
(11, 13]
(13, 20]
(20, positive infinity)
Record lock과 Gap lock을 모두 거는 잠금
행 삽입을 의도하는 일종의 Gap lock
AUTO_INCREMENT
컬럼을 갖는 테이블에 행을 삽입할 때 거는 테이블 레벨 잠금
SELECT ... FROM
SERIALIZABLE
격리 수준에서는 FOR SHARE
로써 작동함SELECT ... FOR SHARE
SELECT ... FOR UPDATE
UPDATE ... WHERE ...
DELETE FROM ... WHERE ...
unique
인덱스에 대한 단일 레코드 특정: 해당 인덱스 레코드에 Record lock 적용SELECT ... FOR SHARE
는 S-lock, 그 외에는 X-lock 적용INSERT ...
duplicate-key
에러가 발생하면 Record S-lock을 획득함INSERT ... ON DUPLICATE KEY UPDATE
duplicate-key
에러 발생 시 S-lock이 아닌 X-lock을 획득하도록 함INSERT ...
UPDATE ...
DELETE FROM ...
// WHERE: `FOREIGN KEY` 제약 조건이 적용된 테이블