모든 테이블에 READ lock을 건다.
UNLOCK TABLES를 실행하면 lock이 해제된다.
MySQL은 이 명령이 실행되었을 때 모든 테이블을 닫는다.
모든 테이블에 공유lock을 건다.
mysql> FLUSH TABLES WITH READ LOCK;
○ SELECT ... LOCK IN SHARE MODE
InnoDB에서만 동작한다.
SELECT로 스킨하는 레코드에 대해서 공유lock을 건다.
SELECT로 스킨하는 레코드에 공유lock을 걸기
mysql>SELECT * FROM t WHERE a<10>
주의점으로 위 예의 경우에는 a필드에 인덱스를 만들어 놓지 않으면 스킨된 모든 레코드에 lock을 걸게 되는 점이다. SELECT추출조건에 사용하는 필드에는 인덱스를 만들어놓지 않으면 안된다는 것이다.
a의 인덱스는 유일키가 아니어도 된다.
○ SELECT ... FOR UPDATE
InnoDB에서만 동작한다.
대상이 되는 레코드에 대해서 트랜잭션이 끝날 때까지 lock을 건다.
다른 클라이언트가 갱신을 하려고 하면 그 클라이언트는 lock의 해제를 기다려야 한다.
5.1.12-beta현재, lock경합시에 에러를 반환하는 구문(오라클의 SELECT NOWAIT문)은 지원되지 않는다.
대상 레코드를 갱신용으로 lock을 걸기
mysql> SELECT * FROM t WHERE a<10>
SELECT ... LOCK IN SHARE MODE와 같이 a 필드에 인덱스를 만들어 놓지 않으면 조사하는 모든 레코드에 lock이 걸리므로 조심해야한다.