
오픈소스 관계형 데이터베이스 관리 시스템

| 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` 제약 조건이 적용된 테이블