`BEGIN` — 트랜잭션 블록 시작

BEGIN — 트랜잭션 블록 시작

여러 SQL 문을 하나의 트랜잭션으로 묶어서 실행하고 싶을 때, 트랜잭션 블록의 시작을 알리는 명령이 BEGIN이에요. 명시적인 COMMIT이나 ROLLBACK을 만날 때까지 이후의 문장들이 한 트랜잭션 안에서 실행돼요.

출처: PostgreSQL 문서

본문

BEGIN은 트랜잭션 블록을 시작해요. 즉, BEGIN 명령 이후의 모든 문장은 명시적인 COMMIT이나 ROLLBACK이 주어질 때까지 하나의 트랜잭션에서 실행돼요. 기본적으로(BEGIN 없이는) PostgreSQL은 트랜잭션을 "autocommit(자동 커밋)" 모드로 실행해요. 즉 각 문장이 자기만의 트랜잭션에서 실행되고, 문장이 끝나면(실행이 성공했다면) 암시적으로 커밋이 수행되고 실패했다면 롤백이 수행돼요.

Synopsis (개요)

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

where transaction_mode is one of:

 ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
 READ WRITE | READ ONLY
 [ NOT ] DEFERRABLE

Description (설명)

문장은 트랜잭션 블록 안에서 더 빠르게 실행돼요. 트랜잭션의 시작/커밋에는 상당한 CPU와 디스크 작업이 필요하기 때문이에요. 여러 관련 변경 사항을 만들 때 트랜잭션 안에서 여러 문장을 실행하는 것은 일관성을 보장하는 데도 유용해요. 다른 세션들은 관련 갱신이 모두 완료되지 않은 중간 상태를 볼 수 없게 돼요.

격리 수준(isolation level), 읽기/쓰기 모드, 또는 deferrable 모드가 지정되면 새 트랜잭션은 마치 SET TRANSACTION이 실행된 것처럼 그 특성을 가져요.

Parameters (파라미터)

  • WORK, TRANSACTION — 선택적인 키워드. 아무 효과가 없어요.
  • 이 문의 다른 파라미터의 의미에 대해서는 SET TRANSACTION을 참고하세요.

Notes (주의)

START TRANSACTIONBEGIN과 같은 기능이에요.

트랜잭션 블록을 종료하려면 COMMIT이나 ROLLBACK을 사용해요.

이미 트랜잭션 블록 안에 있는 상태에서 BEGIN을 발행하면 경고 메시지가 나와요. 트랜잭션의 상태는 영향을 받지 않아요. 트랜잭션 블록 안에 트랜잭션을 중첩하려면 저장점(savepoint)을 사용해요(SAVEPOINT 참고).

하위 호환성을 위해, 연속되는 transaction_mode들 사이의 쉼표는 생략할 수 있어요.

Examples (예시)

트랜잭션 블록을 시작하는 예시예요.

BEGIN;

Compatibility (호환성)

BEGIN은 PostgreSQL 언어 확장이에요. SQL 표준 명령 START TRANSACTION과 동등하며, 그 참조 페이지에 추가 호환성 정보가 있어요.

DEFERRABLE transaction_mode는 PostgreSQL 언어 확장이에요.

참고로, 임베디드 SQL에서는 BEGIN 키워드가 다른 목적으로 사용돼요. 데이터베이스 애플리케이션을 이식할 때 트랜잭션 의미에 주의하시길 권해요.

더 알아보기 (Learn more)

  • 트랜잭션을 끝내는 COMMIT·ROLLBACK과 트랜잭션 특성을 설정하는 START TRANSACTION, 중첩 트랜잭션용 SAVEPOINT를 함께 확인해요.