GET_LOCK
과 RELEASE_LOCK
으로 분산 락(distributed lock)을 구현할 수 있다.-- lock 잡기. 숫자 1은 lock 을 잡기 위해 대기할 수 있는 최대시간. -- 이 시간안에 락을 잡지 못하면 0 반환. SELECT get_lock('session key', 1); -- 배타적으로 할 일. -- 락 풀기 SELECT release_lock('session key');
GET_LOCK
을 동일 세션에서 연속 호출하면 앞선 Lock을 해지하고 다시 잡는다. SELECT get_lock('a', 1); SELECT is_free_lock('a'); -> FALSE SELECT get_lock('a', 1); SELECT is_free_lock('a'); -> FALSE -- release 시작 SELECT release_lock('a'); -> 1 SELECT is_free_lock('a'); -> FALSE SELECT release_lock('a'); -> 1 SELECT is_free_lock('a'); -> TRUE -- 이미 모든 Lock 해지 상태 SELECT release_lock('a'); -> NULL