카테고리:

트랜잭션

BEGIN

현재 세션에서 트랜잭션을 시작합니다.

START TRANSACTION은 BEGIN의 동의어입니다.

참고 항목:

COMMIT , ROLLBACK , SHOW TRANSACTIONS , DESCRIBE TRANSACTION

구문

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]

START TRANSACTION [ NAME <name> ]

매개 변수

WORK | TRANSACTION

다른 데이터베이스 시스템과의 호환성을 제공하는 선택적 키워드입니다.

NAME name

트랜잭션에 이름을 지정하는 선택적 문자열입니다. 이름은 트랜잭션을 식별하는 데 도움이 되지만 필수 사항은 아니며 고유할 필요도 없습니다.

사용법 노트

  • 모든 트랜잭션에는 시스템에서 생성되는 내부 ID가 있습니다. 트랜잭션 ID는 부호 있는 64비트(long) 정수입니다. 값의 범위는 -9,223,372,036,854,775,808(-2 63)~9,223,372,036,854,775,807(2 63 - 1)입니다.

  • 트랜잭션의 이름을 지정하는 경우 NAME 키워드가 필요합니다.

  • 이름을 지정하지 않으면 시스템에서 생성되는 이름이 트랜잭션에 할당됩니다.

  • 트랜잭션을 완료하려면 COMMIT 또는 ROLLBACK 명령을 명시적으로 실행해야 합니다. 이러한 명령 중 하나가 실행될 때까지 트랜잭션은 열린 상태로 유지됩니다.

  • 명시적 트랜잭션에서 SQL 문이 스트림을 쿼리하는 경우, 스트림은 문이 실행될 때가 아닌 트랜잭션이 시작될 때 스트림 이동 지점(즉, 타임스탬프)에서 쿼리됩니다. 이 동작은 새 테이블을 기존 스트림의 행으로 채우는 DML 문과 CREATE TABLE … AS SELECT(CTAS) 문에 모두 적용됩니다.

  • 한 행에서 두 BEGIN 문이 (똑같은 범위 내에서) 실행될 경우 두 번째 문은 무시됩니다. 예를 들어, 다음 코드에서 두 번째와 세 번째 BEGINs은 아무런 효과가 없으며 기존에 열린 트랜잭션이 계속됩니다.

    begin;
    begin;    -- Ignored!
    insert into table1 ...;
    begin;    -- Ignored!
    insert into table2 ...;
    commit;
    

    자율 범위 지정 트랜잭션과 저장 프로시저 를 사용 중이라면 규칙이 더 복잡할 수 있습니다.

참고

이들 예에는 트랜잭션 완료에 필요한 명령이 포함되어 있지 않습니다. 완전한 트랜잭션의 예는 COMMIT 또는 ROLLBACK 을 참조하십시오.

트랜잭션 시작:

BEGIN;

SHOW TRANSACTIONS;

+---------------+--------+--------------+--------------------------------------+-------------------------------+---------+
|            id | user   |      session | name                                 | started_on                    | state   |
|---------------+--------+--------------+--------------------------------------+-------------------------------+---------|
| 1530042321085 | USER1  | 223347060798 | 56cb9163-77a3-4223-b3e0-aa24a20540a3 | 2018-06-26 12:45:21.085 -0700 | running |
+---------------+--------+--------------+--------------------------------------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION()

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042321085         |
+-----------------------+

트랜잭션에 대해 시스템에서 할당한 이름인 56cb9163-77a3-4223-b3e0-aa24a20540a3 을 확인합니다.

지정된 이름으로 트랜잭션 시작:

BEGIN NAME T1;

SHOW TRANSACTIONS;

+---------------+--------+--------------+------+-------------------------------+---------+
|            id | user   |      session | name | started_on                    | state   |
|---------------+--------+--------------+------+-------------------------------+---------|
| 1530042377426 | USER1  | 223347060798 | T1   | 2018-06-26 12:46:17.426 -0700 | running |
+---------------+--------+--------------+------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION();

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042377426         |
+-----------------------+

이전 예와 똑같지만, BEGIN 대신 START TRANSACTION 사용:

START TRANSACTION NAME T2;

SHOW TRANSACTIONS;

+---------------+--------+--------------+------+-------------------------------+---------+
|            id | user   |      session | name | started_on                    | state   |
|---------------+--------+--------------+------+-------------------------------+---------|
| 1530042467963 | USER1  | 223347060798 | T2   | 2018-06-26 12:47:47.963 -0700 | running |
+---------------+--------+--------------+------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION();

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042467963         |
+-----------------------+
맨 위로 이동