• 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.3 테이블 잠금의 제한 및 조건

테이블 잠금을 대기하고있는 세션을 종료하기 위해 KILL 을 안전하게 사용할 수 있습니다. 섹션 13.7.6.4 "KILL"장 을 참조하십시오.

INSERT DELAYED 로 사용하는 테이블 잠금하지 마십시오. 삽입은 잠금을 보유하는 세션이 아니라 다른 스레드에 의해 처리 될 필요가 있기 때문에이 경우 INSERT DELAYED 오류가 발생합니다.

LOCK TABLES 및 UNLOCK TABLES 는 저장 프로그램에서 사용할 수 없습니다.

performance_schema 데이터베이스의 테이블은 setup_ xxx 테이블을 제외하고는 LOCK TABLES 는 잠글 수 없습니다.

LOCK TABLES 문이 활성화되어있는 동안 다음 문은 금지됩니다. CREATE TABLE , CREATE TABLE ... LIKE , CREATE VIEW , DROP VIEW 및 저장 기능, 저장 프로 시저 이벤트에서 DDL 문.

일부 작업에서는 mysql 데이터베이스의 시스템 테이블에 액세스해야합니다. 예를 들어, HELP 문에는 서버 측의 도움말 목차가 필요하며, 또한 CONVERT_TZ() 는 시간대 테이블의 읽기가 필요할 수 있습니다. 서버는 사용자가 명시 적으로 잠금 않아도 같이 필요에 따라 시스템 테이블을 읽기에 묵시적으로 잠급니다. 다음 테이블은 지금 설명한대로 처리됩니다.

 mysql.help_category
 mysql.help_keyword
 mysql.help_relation
 mysql.help_topic
 mysql.proc
 mysql.time_zon​​e
 mysql.time_zon​​e_leap_second
 mysql.time_zon​​e_name
 mysql.time_zon​​e_transition
 mysql.time_zon​​e_transition_type

이러한 테이블 중 하나에 대한 WRITE 잠금 LOCK TABLES 문에서 명시 적으로 설정하는 경우 해당 테이블이 잠겨 유일한 테이블이어야합니다. 다른 어떤 테이블도 같은 문은 잠글 수 없습니다.

하나의 UPDATE 문은 모든 원자이기 때문에 일반적으로 테이블을 잠글 필요가 없습니다. 현재 실행중인 SQL 문을 다른 어떤 세션도 막을 수 없습니다. 그러나 테이블 잠금에 의해 이점을 얻을 수있는 가능성이있는 경우가 몇 가지 있습니다.

  • 일련의 MyISAM 테이블에 많은 작업을 수행하려고하는 경우는 사용하려고하는 테이블을 잠금하는 것이 훨씬 빠릅니다. MyISAM 테이블을 잠그면 MySQL은 잠긴 테이블의 키 캐시를 UNLOCK TABLES 가 불려 갈 때까지 플래시하지 않기 때문에 그 테이블에 대한 삽입, 업데이트 또는 삭제가 가속화됩니다. 일반적으로 키 캐시는 각 SQL 문 후에 플래시됩니다.

    테이블 잠금의 단점은 READ 에 의해 잠겨 테이블을 어떤 세션도 갱신하지 못하고 (잠금을 보유하고있는 세션 포함) 잠금을 보유하고있는 세션을 제외하고 WRITE 의해 잠긴 테이블에 어떤 세션 액세스 할 수없는 것입니다.

  • 비 트랜잭션 스토리지 엔진에 테이블을 사용하는 경우 SELECT 와 UPDATE 사이에 테이블이 다른 세션에 의해 변경되지 않도록하려면 LOCK TABLES 를 사용해야합니다. 다음 예제는 안전하게 수행하기 위해 LOCK TABLES 이 필요합니다.

     LOCK TABLES trans READ, customer WRITE;
     SELECT SUM (value) FROM trans WHERE customer_id = some_id ;
     UPDATE customer
       SET total_value = sum_from_previous_statement
       WHERE customer_id = some_id ;
     UNLOCK TABLES;
    

    LOCK TABLES 를 사용하지 않는 경우는 SELECT 문과 UPDATE 문 실행 사이에 다른 세션에 의해 trans 테이블에 새로운 행이 삽입 될 수 있습니다.

많은 경우 상대적 업데이트 ( UPDATE customer SET value = value + new_value ) 또는 LAST_INSERT_ID() 함수를 사용함으로써 LOCK TABLES 의 사용을 피할 수 있습니다. 섹션 1.8.2.3 "트랜잭션 및 원자 연산의 차이" 를 참조하십시오.

경우에 따라서는 사용자 수준의 권고 잠금 함수 GET_LOCK() 와 RELEASE_LOCK() 을 사용하여 테이블 잠금을 방지 할 수 있습니다. 고속화를 위해 이러한 잠금은 서버의 해시 테이블에 저장되어 pthread_mutex_lock() 와 pthread_mutex_unlock() 으로 구현됩니다. 섹션 12.18 "기타 함수" 를 참조하십시오.

잠금 정책의 자세한 내용은 섹션 8.10.1 "내부 잠금 방법" 을 참조하십시오.

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