3. Transaction 문법

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

본격적인 실습 진행 전에 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개의 댓글