본문 바로가기
MYSQL

TCL명령어 : 트랜잭션이란?

by 융디's 2024. 6. 1.
728x90
TCL명령어 : 트랜잭션이란?

TCL명령어 : 트랜잭션이란?

트랜잭션(Transaction)

하나의 작업으로 처리되는 논리적 작업 단위로,
데이터베이스의 데이터 일관성을 유지하고 데이터 손실을 방지하기 위해 사용된다.
  • 한꺼번에 수행되어야 할 일련의 연산 모음
  • 작업이 모두 성공적으로 완료되거 오류 발생 시 모두 롤백 되어야 한다.
    • SQL 명령문을 통해 데이터의 상태를 바꿀 때마다 데이터베이스 벤더가 내부적으로

    Commit을 실행하여 변경된 내역을 데이터 베이스에 반영

< 간단한 이해 예시 >

  • 계좌이체는 입금과 출금으로 나뉘는데, 출금은 성공했는데 입금에 실패하면 문제가 생긴다.
  • 따라서 이 두 과정은 동시에 성공하던지, 동시에 실패해야 한다.

    ⇒ 이 두 과정을 묶는 방법이 “ 트랜잭션

< 구성 >

  • DML(INSERT, UPDATE, DELETE)의 집합
  • DDL이나 DCL은 한 문장이 트랜잭션으로 처리

< 트랜잭션 시작과 종료 >

  • 시작
    • 트랜잭션의 시작 명령은 없다.
    • 첫 DML이 시작되면 트랜잭션 시작된다고 생각
  • 명시적 종료
    • COMMIT - 트랜잭션을 반영
    • ROLLBACK - 트랜잭션 취소
  • 묵시적 종료
    • DDL, DCL 등이 수행될 때(automatic commit)
    • 시스템 오류(automatic rollback)

트랜잭션 사용하기

MYSQL은 Commit을 통해 쿼리 입력과 동시에 처리하여 데이터 베이스에 반영된다.
  1. 수동으로 트랜잭션 실행
    • COMMIT 명령어를 만나면 변경 사항을 데이터베이스에 영구적으로 적용
-- 트랜잭션 시작
START TRANSACTION;

-- 초기 상태 보여줌
SELECT * FROM users;

-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('돌쇠', 'abcd', 'abc@naver.com');

-- 수정 상태 보여줌
SELECT * FROM users;

-- 트랜잭션을 DB에 적용
COMMIT;

-- 적용된 결과 조회
SELECT * FROM users;
  1. 트랜잭션 하기 전으로 롤백 하기
    • Rollback 명령어를 통해 트랜잭션 하기 전으로 돌아간다.
-- 트랜잭션 시작
START TRANSACTION;

-- 초기 상태 보여줌
SELECT * FROM users;

-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('대감', 'abcd', 'abc@naver.com');

-- 수정 상태 보여줌
SELECT * FROM users;

-- 트랜잭션을 DB에 적용하지 않고, 롤백 작업 수행
ROLLBACK;

-- 적용된 결과 조회
SELECT * FROM users;
  1. 특정 저장 포인트를 설정하여, 생성한 포인트로 롤백 하기
    • SAVEPOINT를 이용해 저장 포인트 지점을 설정
    • ROLLBACK TO [세이브포인트 명]을 이용해 해당 지점으로 롤백
-- 트랜잭션 시작
START TRANSACTION;

-- 초기 상태 보여줌
SELECT * FROM users;

-- 데이터 수정
INSERT INTO user (username, password, email) VALUES ('대감', 'abcd', 'abc@naver.com');

-- 수정 상태 보여줌
SELECT * FROM users;

-- SAVEPOINT 설정
SAVEPOINT before_commit;

-- 다른 데이터 수정
INSERT INTO user (username, password, email) VALUES ('마님', 'efgh', 'efg@naver.com');


-- 수정된 상태 보여줌
SELECT * FROM users;

-- 롤백하여 SAVEPOINT까지만 복원
ROLLBACK TO before_commit;

-- 롤백 후 상태 조회
SELECT * FROM users;

-- 트랜잭션을 DB에 적용
COMMIT;
728x90

'MYSQL' 카테고리의 다른 글

CREATE / INSERT 절  (0) 2024.05.30
MYSQL 명령어 총 정리  (0) 2024.05.26
SUBQUERY  (0) 2024.05.07
조인  (0) 2024.05.07
GROUP BY  (0) 2024.05.05