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