• 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 구문
    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.6 SET TRANSACTION 구문

SET [GLOBAL | SESSION] TRANSACTION
    transaction_characteristic [, transaction_characteristic] ...

transaction_characteristic:
    ISOLATION LEVEL level
  | READ WRITE
  | READ ONLY

level:
     REPEATABLE READ
   | READ COMMITTED
   | READ UNCOMMITTED
   | SERIALIZABLE 

이 문은 트랜잭션 의 특성을 지정합니다. 이것은 쉼표로 구분 된 하나 이상의 특성 값의 목록을받습니다. 이러한 특성은 트랜잭션 격리 수준 또는 액세스 모드를 설정합니다. 분리 레벨은 InnoDB 테이블에 대한 조작에 사용됩니다. 액세스 모드는 MySQL 5.6.5의 시점에서 지정할 수 있으며, 트랜잭션이 읽기 / 쓰기 또는 읽기 전용의 두 모드에서 작동하는지 보여줍니다.

또한 SET TRANSACTION 명령문의 범위를 나타내는 옵션의 GLOBAL 또는 SESSION 키워드를 포함 할 수 있습니다.

트랜잭션의 특성의 범위

트랜잭션의 특성은 전 세계적으로 현재 세션 또는 다음 거래에 대해 설정할 수 있습니다.

  • GLOBAL 키워드를 지정하면이 문장은 이후의 모든 세션에 전체적으로 적용됩니다. 기존 세션은 영향을받지 않습니다.

  • SESSION 키워드를 지정하면,이 문은 현재 세션에서 실행되는 이후의 모든 거래에 적용됩니다.

  • SESSION 또는 GLOBAL 키워드 모두 지정되지 않은 경우,이 문은 현재 세션에서 실행되는 다음 (시작되지 않은) 트랜잭션에 적용됩니다.

트랜잭션의 특성을 글로벌로 변경하려면 SUPER 권한이 필요합니다. 어떤 세션도 세션의 특성 (트랜잭션 도중에도) 또는 다음 트랜잭션의 특성을 자유롭게 변경할 수 있습니다.

활성 트랜잭션이 존재하는 동안은 GLOBAL 또는 SESSION 을 지정하지 SET TRANSACTION 은 허용되지 않습니다.

 mysql> START TRANSACTION;
 Query OK, 0 rows affected (0.02 sec)

 mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 ERROR 1568 (25001) : Transaction characteristics can not be changed
 while a transaction is in progress

서버 시작시 전역 기본 격리 수준을 설정하려면 명령 행 또는 옵션 파일에서 mysqld에 --transaction-isolation= level 옵션을 사용합니다. 이 옵션의 level 값은 공백이 아닌 대시가 사용되므로 허용되는 값은 READ-UNCOMMITTED , READ-COMMITTED , REPEATABLE-READ 또는 SERIALIZABLE 입니다. 예를 들어, 기본 격리 수준을 REPEATABLE READ 로 설정하려면 옵션 파일의 [mysqld] 섹션에서 다음 줄을 사용합니다.

 [mysqld]
 transaction-isolation = REPEATABLE-READ

글로벌 트랜잭션 격리 수준이나 세션의 트랜잭션 격리 수준은 tx_isolation 시스템 변수를 사용하여 런타임에 확인 또는 설정할 수 있습니다.

 SELECT @@ GLOBAL.tx_isolation @@ tx_isolation;
 SET GLOBAL tx_isolation = 'REPEATABLE-READ';
 SET SESSION tx_isolation = 'SERIALIZABLE';

마찬가지로, 서버 시작시 또는 실행시 트랜잭션 액세스 모드를 설정하려면 --transaction-read-only 옵션이나 tx_read_only 시스템 변수를 사용합니다. 기본적으로 이들은 OFF (모드는 읽기 / 쓰기)이지만, ON 으로 설정하고 읽기 전용 기본 모드로 전환 할 수 있습니다.

tx_isolation 또는 tx_read_only 의 글로벌 또는 세션 값을 설정하는 것은 SET GLOBAL TRANSACTION 또는 SET SESSION TRANSACTION 에서 격리 수준 또는 액세스 모드를 설정하는 것과 같습니다.

분리 레벨의 자세한 내용과 사용 방법

InnoDB 는 여기에서 설명되는 각 트랜잭션 격리 수준을 다른 잠금 방법을 사용하여 지원하고 있습니다. ACID 준수가 중요한 요건이다 중요한 데이터에 대한 조작의 경우, 기본 REPEATABLE READ 수준을 사용하여 고급 일관성을 적용 할 수 있습니다. 또는 정확한 일관성과 반복 가능한 결과가 자물쇠를위한 오버 헤드의 양을 최소화만큼 중요하지 않다 일괄 보고서 등의 상황에서는 READ COMMITTED 이나 경우에 따라서는 READ UNCOMMITTED 를 사용하여 일관성 규칙을 완화 수 있습니다. SERIALIZABLE 은 REPEATABLE READ 보다 더 엄격한 규칙을 적용하고 주로 XA 트랜잭션 외에도 병렬성과 교착 상태 문제 해결의 특수한 상황에서 사용됩니다.

이 격리 수준이 InnoDB 트랜잭션 작동 방법에 대한 완전한 정보는 섹션 14.2.2 "InnoDB 트랜잭션 모델 및 잠금" 을 참조하십시오. 특히 InnoDB 의 레코드 수준 잠금 및 그것을 사용하여 다양한 종류의 문이 실행되는 방법의 자세한 내용은 섹션 14.2.6 "InnoDB 레코드 격차 및 넥스트 키 잠금" 및 섹션 14.2.8 "InnoDB의 다양한 SQL 문에서 설정된 잠금" 을 참조하십시오.

다음 목록은 MySQL이 각종 트랜잭션 수준을 어떻게 지원하는지에 대해 설명하고 있습니다. 이 목록은 가장 일반적으로 사용되는 수준에서 사용 빈도가 낮은 순서대로 정렬되어 있습니다.

  • REPEATABLE READ

    이것이 InnoDB 의 기본 격리 수준입니다. 일관성 독해 에서는 READ COMMITTED 격리 수준과 중요한 차이가 있습니다. 동일한 트랜잭션의 일관성 독해는 처음 읽기에 의해 설립 된 스냅 샷을 읽습니다. 이 규칙은 동일한 트랜잭션에서 여러 일반 (비 록) SELECT 문을 발행 한 경우 이러한 SELECT 문은 서로에 대해서도 일관성이 있음을 나타냅니다. 섹션 14.2.4 "일관성 비 록 읽기" 를 참조하십시오.

    잠금 읽기 ( FOR UPDATE 또는 LOCK IN SHARE MODE 를 포함한 SELECT ), UPDATE 및 DELETE 문의 경우, 잠금은 그 문이 고유 인덱스를 고유의 검색 조건 또는 범위 유형의 검색 조건 중 사용하고 있는지 따라 다릅니다. 고유의 검색 조건을 사용한 고유 인덱스의 경우, InnoDB 는 발견 된 인덱스 레코드 만 잠그고 그 앞에있는 갭 은 잠그지 않습니다. 기타 검색 조건의 경우, InnoDB 는 갭 잠금 또는 넥스트 키 잠금 을 사용하여 범위에 포함되는 갭에 다른 세션에서 삽입을 차단하여 스캔 된 인덱스 범위를 잠급니다.

  • READ COMMITTED

    일관성 (비 록) 읽기에 대해 다소 Oracle 비슷한 격리 수준입니다. 각 일관성 읽기 가 (같은 트랜잭션도) 자신의 새로운 스냅 샷 을 설정하고 읽습니다. 섹션 14.2.4 "일관성 비 록 읽기" 를 참조하십시오.

    잠금 읽기 ( FOR UPDATE 또는 LOCK IN SHARE MODE 를 포함한 SELECT ) UPDATE 문 및 DELETE 문의 경우, InnoDB 는 인덱스 레코드만을 잠 그어, 그 앞에있는 갭 은 락하지 않기 때문에 잠긴 레코드 옆에 새 레코드의 자유로운 삽입이 허용됩니다.

    참고

    MySQL 5.6에서는 READ COMMITTED 격리 수준이 사용되는 경우 또는 비추천의 innodb_locks_unsafe_for_binlog 시스템 변수가 설정되어있는 경우, 외부 키 제약 조건 검사와 중복 키 체크를 제외하고, InnoDB 의 갭 잠금은 존재하지 않습니다. 또한 일치하지 않는 행에 대한 레코드 잠금도 MySQL이 WHERE 조건을 평가 한 후에 해제됩니다.

    READ COMMITTED 를 사용하거나 innodb_locks_unsafe_for_binlog 를 활성화하려면 행 기반의 바이너리 로깅을 사용해야합니다.

  • READ UNCOMMITTED

    SELECT 문은 비 잠금 방법으로 수행되지만 이전 버전의 행이 사용 될 수 있습니다. 따라서이 격리 수준을 사용하면 이러한 읽기에 일관성이 없습니다. 이것은 더티 읽기 라고도합니다. 그렇지 않으면이 격리 수준은 READ COMMITTED 처럼 작동합니다.

  • SERIALIZABLE

    이 수준은 REPEATABLE READ 와 비슷하지만, 자동 커밋이 비활성화되어있는 경우, InnoDB 는 모든 일반 SELECT 문을 SELECT ... LOCK IN SHARE MODE 로 암시 적으로 변환합니다. 자동 위탁이 활성화되어있는 경우 SELECT 자신의 트랜잭션입니다. 따라서 읽기 전용 인 것을 알고 있기 때문에 일관성있는 (비 록) 읽기로 실행 된 경우는 직렬화 할 수 다른 트랜잭션에 대한 차단이 필요하지 않습니다. (선택된 행이 다른 트랜잭션에 의해 변경된 경우 일반 SELECT 강제로 차단하려면 자동 커밋을 비활성화합니다.)

트랜잭션 액세스 모드

MySQL 5.6.5의 시점에서는 트랜잭션 액세스 모드는 SET TRANSACTION 으로 지정할 수 있습니다. 기본적으로 트랜잭션은 읽기 / 쓰기 모드에서 실행되는 트랜잭션에서 사용되는 테이블에 대한 읽기 및 쓰기가 허용됩니다. 이 모드는 READ WRITE 액세스 모드를 사용하여 명시 적으로 지정할 수 있습니다.

트랜잭션 액세스 모드가 READ ONLY 로 설정되어있는 경우, 테이블에 변경이 금지됩니다. 이렇게하면 쓸 수 있지 않은 경우에 가능하다 스토리지 엔진의 성능 향상이 실현 될 가능성이 있습니다.

같은 문에서 READ WRITE 와 READ ONLY 모두를 지정하는 것은 허용되지 않습니다.

읽기 전용 모드에서는 DML 문을 사용하여 TEMPORARY 키워드로 작성된 테이블은 계속 변경할 수 있습니다. 영구 테이블과 마찬가지로 DDL 문에 의해 수행되는 변경은 허용되지 않습니다.

READ WRITE 및 READ ONLY 액세스 모드는 START TRANSACTION 문을 사용하여 개별 트랜잭션에 지정할 수 있습니다.

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