MySQL

(DB) 트랜잭션 이란 & (COMMIT,ROLLBACK) -19

mynote6676 2025. 5. 16. 18:54

1.트랜잭션이란?

더보기
더보기

1.트랜잭션이란?

트랙잭션은 데이터베이스에서 여러 SQL문을 하나의 작업 단위로 묶어 실행합니다. 모든 작업이 

성공해야 적용되며, 하나라도 실패하면 전체가 취소됩니다.

 

요약

-트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위입니다.

-여러 SQL 명령어 묶어 "전부 성공"하거나 "전부 실패"하도록 보장합니다.

-실행활 예: 은행 송금

- A가 B에게 5만 원 송금: A 계좌에서 5만원 감소, B 계좌에서 5만원 증가

-두 작업이 모두 성공해야 데이터가 올바름

 

트랜젹션의 중요성

-데이터 무결성 유지 : 부분 성공/실패로 인한 오류 방지

- 예: 송금 중 시스템 오류 발생 시, 돈이 사라지거나 중복 지급 되지 않도록 보호 

 

질문 : 트랜잭션이 없다면 은행 송금에서 어떤 문제가 생길까?

트랜잭션이 없는 은행 송금의 문제

-부분 완료 : 출금은 성공했지만 입금이 실패해 돈이 사라짐 (예 : A 계좌에서 10만원 차감 후 B계좌 입금 실패)

- 동시 접근 출동 : 여러 송금이 동시에 처리되어 잔고 계산 오류.(예: A 계좌에서 B와  C로 동시 송금)

-데이터 손실: 시스템의 장애로 송금 기록 사라짐.

- 결과 : 재무적 손실과 은행 신뢰도 하락.

 

--------------------------------------------------------------------------------------------------------------------------------------

 

2.COMMIT 과 ROLLBACK

더보기
더보기

COMMIT

역활 : 트랙잭션의 모든 변경사항을 데이터베이스에 영구 저장

사용 시점: 오류 발생 또는 작업 실패 시

예 : 잔액 부족으로 송금이 불가능할 때

MySQL 트랜잭션 명령어

-START TRANSACTION: 트랜잭션 시작

-COMMIT : 변경사항 저장

- ROLLBACK : 변경사항 취소

기본 구조

START TRANSACTION;
--SQL 명령어
COMMIT; -- 성공 시
-- 또는 
ROLLBACK; 실패 시

 

MySQL 8.0 팁   lnnoDB 는 자동커밋(autocommit) 이 기본으로 활성화되어 있습니다. 트랜잭션을 

수동으로 제어하려면  START TRASACTION을 사용하세요

 

 

동적으로 쿼리 작성하기 

더보기
더보기

-- MySQL 워크 밴치에서 트랜잭션 사용해보기

 

--홍길동 계좌에서 이순 계좌로 20만원 이체 요청

set autocommit = 0 ;

start trancaton; 

 

--홍길동 계좌에서 잔액 확인

set @bal = (select balance from accouts where account_id = 1);

 

-- 잔액이 충분하다면 true, 아니면 false

set @is_valid = (@bal >= 50000);

 

-- 홍길동 계좌에 잔액 수정 처리

update accounts 

set balance = balance  - 50000

where account_id = 1 and @is_valid;

 

-- 이순신 계좌에 잔액을 수정 처리

update   accounts 

set balance = balancer + 50000

where account_id  = 2 and @is_valid;

 

select  * from accounts;

 

--if(@is_valid, commit, rollback);

-- commit where @is_valid;

-- rollback where @is_valid;

 

728x90