MYSQL - LOCK 문법
LOCK TABLES
tbl_name [[AS] alias] lock_type
[, tbl_name [[AS] alias] lock_type] ....
lock_type:
READ (LOCAL]
| [LOW_PRIORITY] WRITE
UNLOCK TABLES
MySQL은 클라이언트 세션들이 테이블들에 접근을 위해 다른 세션들과 협조할 목적으로 명시적으로 테이블 락을 얻을 수 있도록 합니다. 또는 한 세션이 테이블에 배타적 접근을 요구할 때 일정 기간 동안 다른 세션들이 테이블 수정을 못하도록 할 수 있습니다. 세션은 스스로 락을 얻거나 풀어줄 수 있습니다. 한 세션은 다른 세션을 위해 락을 취득할 수 없고, 다른 세션에 의한 락을 풀 수 없습니다. 락은 트랜잭션을 상대하거나 또는 테이블 업데이트시 더 나은 속도를 내기 위해 사용 될 수도 있습니다.
LOCK TABLES는 명시적으로 현재 클라이언트 세션을 위해 테이블 락을 취득합니다. 테이블 락은 기본 테이블들 또는 뷰들을 대상으로 취득 할 수 있으며 반드시 LOCK TABLES 권한을 가지고 있어야 합니다. 그리고 각 객체가 락이 되기 위해서는 SELECT 권한이 필요합니다.
뷰 락킹을 위해, LOCK TABLES는 자동적으로 락을 걸고 락이 걸리도록 테이블들 셋에 뷰에서 사용한 모든 기본 테이블들을 추가합니다. 만약 LOCK TABLES를 이용해 명시적으로 테이블에 락을 걸면, 트리거에서 사용한 어떤 테이블들은 내부적으로 또한 락이 걸립니다.
UNLOCK TABLES는 명시적으로 현재 세션에 의해 잡힌 어느 테이블 락들을 풀어줍니다. UNLOCK TABLES 의 또 다른 사용은 FLUSH TABLES WITH READ LOCK 구문을 이용해 취득한 global read lock을 풀어주기도 합니다. FLUSH TABLES WITH READ LOCK은 모든 데이터베이스에 있는 모든 테이블들에 락을 걸 수 있게 해줍니다.
참조 [HELP FLUSH]. (시간 내 snapshots을 잡을 수 있는 Veritas 같은 파일 시스템을 가지고 있으면, 이것은 백업을 얻기 위한 아주 편리한 방법이 됩니다.)
# 예제)
mysql> LOCK TABLES t1 READ;
mysql> SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+
mysql> UNLOCK TABLES;
0 댓글