• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    1. START TRANSACTION, COMMIT 및 ROLLBACK 구문
    2. 롤백 할 수없는 문
    3. 암시 적 커밋을 발생시키는 문
    4. SAVEPOINT, ROLLBACK TO SAVEPOINT 및 RELEASE SAVEPOINT 구문
    5. LOCK TABLES 및 UNLOCK TABLES 구문
    1. 테이블 잠금과 트랜잭션의 통신
    2. LOCK TABLES 및 트리거
    3. 테이블 잠금의 제한 및 조건
    6. SET TRANSACTION 구문
    7. XA 트랜잭션
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.3.5.1 테이블 잠금과 트랜잭션의 통신

LOCK TABLES 및 UNLOCK TABLES 는 트랜잭션의 사용 사이에서 다음과 같이 통신합니다.

  • LOCK TABLES 는 트랜잭션 안전하지 않기 때문에 테이블을 잠그려고하기 전에 활성 트랜잭션을 암시 적으로 커밋합니다.

  • UNLOCK TABLES 는 활성 트랜잭션을 암시 적으로 노력하고 있지만 이것이 행해지는 테이블 잠금을 얻기 위해 LOCK TABLES 가 사용 된 경우입니다. 예를 들어 다음과 같은 일련의 문은 UNLOCK TABLES 가 글로벌 읽기 잠금 해제되지만 유효한 테이블 잠금이 없기 때문에 트랜잭션은 커밋되지 않습니다.

     FLUSH TABLES WITH READ LOCK;
     START TRANSACTION;
     SELECT ...;
     UNLOCK TABLES;
    
  • 트랜잭션 (예를 들어, START TRANSACTION 에서) 시작하면 현재 트랜잭션이 암시 적으로 커밋 된 기존 테이블 잠금이 해제됩니다.

  • FLUSH TABLES WITH READ LOCK 은 글로벌 읽기 잠금을 가져 오지만 테이블 잠금은 검색하지 않기 때문에 테이블 잠금과 암묵적인 위탁에 관해서 LOCK TABLES 와 UNLOCK TABLES 와 같은 동작을 따르지 않습니다. 예를 들어, START TRANSACTION 은 글로벌 읽기 잠금을 해제하지 않습니다. 섹션 13.7.6.3 "FLUSH 구문" 을 참조하십시오.

  • 암시 적 트랜잭션 커밋을 발생시키는 다른 문은 기존 테이블 잠금을 해제하지 않습니다. 이러한 문 목록은 섹션 13.3.3 "암시 적 커밋을 발생시키는 문" 을 참조하십시오.

  • 트랜잭션 테이블 ( InnoDB 테이블 등)에 LOCK TABLES 및 UNLOCK TABLES 를 사용하는 올바른 방법은 SET autocommit = 0 ( START TRANSACTION 아님)에 이어 LOCK TABLES 를 지정하여 트랜잭션을 시작하고 트랜잭션을 명시 적으로 커밋 할 때까지 UNLOCK TABLES 를 호출하지 않는 것입니다. 예를 들어, 테이블 t1 에 쓰기 테이블 t2 에서 읽어야하는 경우에는 다음과 같이 실행할 수 있습니다.

     SET autocommit = 0;
     LOCK TABLES t1 WRITE, t2 READ ...;
    ... do something with tables t1 and t2 here ...
     COMMIT;
     UNLOCK TABLES;
    

    LOCK TABLES 를 호출하면, InnoDB 는 내부적으로 자신의 테이블 락을 취득 해, MySQL은 자신의 테이블 락을 취득합니다. InnoDB 는 다음의 커밋시에 내부 테이블 잠금을 해제하지만, MySQL에서 테이블 잠금이 해제되도록하려면 UNLOCK TABLES 를 호출해야합니다. autocommit = 1 을 지정하면 LOCK TABLES 의 호출 직후에 InnoDB 에 의해 내부 테이블 잠금이 해제되고 교착 상태가 매우 발생해질 수 있기 때문에이 지정하지 않도록하십시오. autocommit = 1 이 지정된 경우 기존 응용 프로그램이 불필요한 교착 상태를 방지하는데 도움을주기 위해 InnoDB 는 내부 테이블 잠금을 전혀 취득하지 않습니다.

  • ROLLBACK 은 테이블 잠금을 해제하지 않습니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved