Skip to Content
Suffering builds character

3. 트랜잭션 개요

테스트용 MySQL 서버 클라이언트 실행(A 서버라고 가정)

트랜잭션 연습용 DB 생성 및 사용

sql
CREATE DATABASE trx_test; use trx_test;

t1 테이블 제거(기존에 존재할 경우)

sql
DROP TABLE IF EXISTS t1;

t1 테이블 생성

sql
CREATE TABLE t1 ( cd INT, v1 INT );

샘플 데이터 저장

sql
INSERT INTO t1 VALUES (1, 50); INSERT INTO t1 VALUES (2, 50); COMMIT;

autocommit 모드 확인

sql
SELECT @@AUTOCOMMIT;

트랜잭션 autocommit 모드 OFF

sql
SET AUTOCOMMIT = 0;
💡
Tip

Autocommit 모드

트랜잭션을 마칠 때 수행하는 COMMIT 명령어를 명시적으로 작성하지 않아도, INSERT, UPDATE, DELETE 시 데이터가 자동으로 적용되는 모드

MySQL은 기본적으로 autocommit 모드가 활성화되어 있음

autocommit을 0(false)으로 설정할 경우 COMMIT을 명시적으로 수행해야 데이터가 테이블에 저장됨

BEGIN 명령어를 통해 트랜잭션 시작

sql
BEGIN; -- START TRANSACTION;과 같음

새로운 데이터 저장

sql
INSERT INTO t1 VALUES (3, 50);

현재 트랜잭션 상태 확인 BEGIN만 하고 상태를 조회해도 트랜잭션이 실행 중이게 되진 않음 특정 쿼리를 수행해야 트랜잭션이 실행 중으로 바뀜

sql
SELECT trx_id, trx_state, trx_started, trx_operation_state, trx_tables_in_use, trx_tables_locked, trx_isolation_level FROM INFORMATION_SCHEMA.INNODB_TRX;

새로운 MySQL 서버(B 서버라고 가정) 실행 후 t1 테이블 조회

sql
SELECT * FROM t1;

→ A 서버에서 아직 commit하지 않았기 때문에 30은 조회되지 않음

기존 서버(A)로 돌아와서 현재 트랜잭션의 변경 내용을 DB에 영구적으로 저장 후 트랜잭션 종료

sql
COMMIT; -- END TRANSACTION; 와 같음

기존 서버에서 트랜잭션 상태 재 확인

sql
SELECT trx_id, trx_state, trx_started, trx_operation_state, trx_tables_in_use, trx_tables_locked, trx_isolation_level FROM INFORMATION_SCHEMA.INNODB_TRX; -- Empty Set.

다른 서버에서 t1 테이블 다시 조회

sql
SELECT * FROM t1;

현재 스토리지 엔진 확인

sql
SELECT table_schema, table_name, engine FROM information_schema.TABLES WHERE table_name = 't1' AND table_schema = 'trx_test';

→ 트랜잭션은 InnoDB 엔진에서 지원

다른 조회 방법

sql
SHOW TABLE STATUS WHERE name='t1';
Last updated on