Loading...
MySQL 9.5 Reference Manual 9.5의 15.3.7 SET TRANSACTION Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1SET [GLOBAL | SESSION] TRANSACTION 2 transaction_characteristic [, transaction_characteristic] ... 3 4transaction_characteristic: { 5 ISOLATION LEVEL level 6 | access_mode 7} 8 9level: { 10 REPEATABLE READ 11 | READ COMMITTED 12 | READ UNCOMMITTED 13 | SERIALIZABLE 14} 15 16access_mode: { 17 READ WRITE 18 | READ ONLY 19}
이 statement는
transaction
특성을 지정합니다. 이 statement는 하나 이상의 특성 값을 콤마로 구분한 리스트를 받습니다. 각 특성 값은 트랜잭션
isolation level 또는 access mode를 설정합니다. isolation level은
InnoDB 테이블에 대한 작업에 사용됩니다.
access mode는 트랜잭션이 읽기/쓰기 모드 또는 읽기 전용 모드로 동작할지를 지정합니다.
또한, SET TRANSACTION은
statement의 scope를 나타내기 위해 선택적인 GLOBAL 또는
SESSION keyword를 포함할 수 있습니다.
트랜잭션 isolation level을 설정하려면
ISOLATION LEVEL level 절을 사용합니다. 동일한
SET TRANSACTION statement에서 여러 개의
ISOLATION LEVEL 절을 지정하는 것은 허용되지 않습니다.
기본 isolation level은
REPEATABLE READ입니다. 허용되는 다른
값은 READ COMMITTED, READ UNCOMMITTED, 그리고
SERIALIZABLE입니다. 이러한 isolation level에 대한 정보는
Section 17.7.2.1, “Transaction Isolation Levels”을 참조하십시오.
트랜잭션 access mode를 설정하려면 READ WRITE 또는 READ ONLY 절을 사용합니다. 동일한
SET TRANSACTION statement에서 여러 개의 access mode 절을
지정하는 것은 허용되지 않습니다.
기본적으로 트랜잭션은 읽기/쓰기 모드에서 수행되며,
트랜잭션에서 사용되는 테이블에 대해 읽기와 쓰기가 모두 허용됩니다. 이 모드는 access mode가
READ WRITE인
SET TRANSACTION을 사용하여 명시적으로 지정할 수 있습니다.
트랜잭션 access mode가 READ ONLY로 설정된 경우, 테이블에 대한 변경은 금지됩니다. 이는
쓰기 작업이 허용되지 않을 때 가능한 성능 향상을 스토리지 엔진이 수행할 수 있게 할 수 있습니다.
읽기 전용 모드에서도 TEMPORARY keyword로 생성된 테이블은
DML statement를 사용하여 변경할 수 있습니다. DDL statement로 수행되는 변경은, 영구 테이블과 마찬가지로 허용되지
않습니다.
READ WRITE 및 READ ONLY access mode는
START TRANSACTION statement를 사용하여 개별 트랜잭션에 대해 지정할 수도
있습니다.
트랜잭션 특성은 전역적으로, 현재 세션에 대해, 또는 다음 트랜잭션에 대해서만 설정할 수 있습니다:
GLOBAL keyword를 사용하는 경우:
이 statement는 이후에 생성되는 모든 세션에 전역적으로 적용됩니다.
기존 세션에는 영향이 없습니다.
SESSION keyword를 사용하는 경우:
이 statement는 현재 세션 내에서 수행되는 모든 이후 트랜잭션에 적용됩니다.
이 statement는 트랜잭션 내에서 허용되지만, 현재 진행 중인 트랜잭션에는 영향을 주지 않습니다.
트랜잭션 사이에서 실행되는 경우, 이 statement는 지정된 특성에 대해 다음 트랜잭션 값을 설정하는 앞선 어떤 statement도 override합니다.
SESSION 또는
GLOBAL keyword를 사용하지 않는 경우:
이 statement는 세션 내에서 수행되는 다음 단일 트랜잭션에만 적용됩니다.
이후 트랜잭션은 지정된 특성에 대해 세션 값을 다시 사용합니다.
이 statement는 트랜잭션 내에서는 허용되지 않습니다:
1mysql> START TRANSACTION; 2Query OK, 0 rows affected (0.02 sec) 3 4mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 5ERROR 1568 (25001): Transaction characteristics can't be changed 6while a transaction is in progress
global 트랜잭션 특성의 변경에는
CONNECTION_ADMIN privilege (또는
deprecated된 SUPER privilege)가 필요합니다.
어떤 세션이든 자신의 세션 특성(심지어 트랜잭션 중간에서도) 또는
다음 트랜잭션의 특성(해당 트랜잭션이 시작되기 이전)을 자유롭게 변경할 수 있습니다.
서버 startup 시 global isolation level을 설정하려면,
커맨드 라인 또는 옵션 파일에서
--transaction-isolation=level
옵션을 사용합니다. 이 옵션에 대한 level 값은 공백 대신 대시를 사용하므로,
허용 가능한 값은
READ-UNCOMMITTED,
READ-COMMITTED,
REPEATABLE-READ, 또는
SERIALIZABLE입니다.
마찬가지로, 서버 startup 시 global 트랜잭션 access mode를 설정하려면
--transaction-read-only 옵션을 사용합니다.
기본값은 OFF (읽기/쓰기 모드)이지만,
값을 ON으로 설정하여 읽기 전용
모드로 설정할 수 있습니다.
예를 들어, isolation level을
REPEATABLE READ로,
access mode를 READ WRITE로 설정하려면,
옵션 파일의 [mysqld] section에 다음과 같은 line을 사용합니다:
1[mysqld] 2transaction-isolation = REPEATABLE-READ 3transaction-read-only = OFF
runtime 시, global, 세션, 및
다음 트랜잭션 scope level의 특성은,
앞서 설명한 대로
SET TRANSACTION statement를 사용하여 간접적으로 설정할 수 있습니다.
또한
SET
statement를 사용하여
transaction_isolation 및
transaction_read_only 시스템
변수에 값을 할당함으로써 직접 설정할 수도 있습니다:
SET TRANSACTION은
서로 다른 scope level에서 트랜잭션 특성을 설정하기 위한
선택적인 GLOBAL 및
SESSION keyword를 허용합니다.
값 할당을 위한
SET
statement는
transaction_isolation 및
transaction_read_only
시스템 변수를 서로 다른 scope level에서 설정하기 위한 문법을 가지고 있습니다.
다음 table은 각
SET TRANSACTION 및
변수 할당 문법에 의해 설정되는 특성 scope level을 보여줍니다.
Table 15.9 SET TRANSACTION Syntax for Transaction Characteristics
| Syntax | Affected Characteristic Scope |
|---|---|
SET GLOBAL TRANSACTION<br> transaction_characteristic | Global |
SET SESSION TRANSACTION<br> transaction_characteristic | Session |
SET TRANSACTION<br> transaction_characteristic | Next transaction only |
Table 15.10 SET Syntax for Transaction Characteristics
| Syntax | Affected Characteristic Scope |
|---|---|
SET GLOBAL var_name =<br> value | Global |
SET @@GLOBAL.var_name =<br> value | Global |
SET PERSIST var_name =<br> value | Global |
SET @@PERSIST.var_name =<br> value | Global |
SET PERSIST_ONLY var_name =<br> value | No runtime effect |
SET @@PERSIST_ONLY.var_name =<br> value | No runtime effect |
SET SESSION var_name =<br> value | Session |
SET @@SESSION.var_name =<br> value | Session |
SET var_name =<br> value | Session |
SET @@var_name =<br> value | Next transaction only |
| Syntax | Affected Characteristic Scope |
|---|
runtime 시 global 및 세션 트랜잭션 특성 값을 확인하는 것도 가능합니다:
1SELECT @@GLOBAL.transaction_isolation, @@GLOBAL.transaction_read_only; 2SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;
15.3.6 LOCK TABLES and UNLOCK TABLES Statements
15.3.8 XA Transactions