3. Transaction 문법

차분한열정·2021년 4월 20일

본격적인 실습 진행 전에 MySQL에서 트랜잭션 관련 문법을 정리해보자.

1. 트랜잭션 관련 설정

일단 트랜잭션을 시작하기 전에 다음과 같이 Transaction Isolation Level 등을 설정해줘야 한다.

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

transaction_characteristic: {
    ISOLATION LEVEL level
  | access_mode
}

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

access_mode: {
     READ WRITE
   | READ ONLY
}

*access_mode에서 READ ONLY을 주면 트랜잭션에서 테이블에 어떤 변경사항을 주는 것은 금지된다. 대신 이 모드를 설정하면 엔진이 성능 최적화를 한다.

2. 트랜잭션 시작과 종료

다음과 같은 명시적인 SQL 문을 통해 트랜잭션을 시작하고 종료할 수 있다.

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}
  • START TRANSACTION or BEGIN : 트랜잭션 시작
  • COMMIT : 현재 트랜잭션 커밋(=변경사항 영구 적용)
  • ROLLBACK : 현재 트랜잭션 롤백(=변경사항 초기화)

*autocommit : 1로 설정되어 있으면 별도로 START TRANSACTION ~ COMMIT을 작성하지 않아도 마치 그 안에 있는 것처럼 모든 statement가 atomic하게 실행됨, 그래서 ROLLBACK을 실행할 수 없음, 하지만 만약 실행 중 에러가 발생하면 롤백되기는 함

  1. START TRANSACTION이라고 쓰면 그 다음으로 COMMIT이나 ROLLBACK이 등장하기 전까지는 자동으로 autocommit 모드가 해제된다.

  2. 보통 Data Definition Language에 해당하는 구문들(CREATE/ DROP/ALTER TABLE 등), mysql 데이터베이스를 사용하는 것들(ALTER USER/GRANT 등)은 rollback할 수 없다.

  3. 다음과 같이 SAVEPOINT를 설정해서 SAVEPOINT 이전까지의 작업들만 rollback 하는 것도 가능하다.

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
profile
성장의 기쁨

0개의 댓글