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;
'MySQL' 카테고리의 다른 글
(GB) GROUP BY 와 HAVING 절 - 22 (0) | 2025.05.16 |
---|---|
(DB) 테이블 복사 및 데이터 추가 - 20 (0) | 2025.05.16 |
(DB) MySQL 별칭, 변수 선언, IF 문 - 18 (0) | 2025.05.16 |
(DB)MySQL JOIN - 17 (0) | 2025.05.14 |
(DB) 블로그에 필요한 DB 간단 버전 (0) | 2025.05.13 |