[MariaDB] 10. 트랜잭션 (Transaction)

JIWON·2025년 5월 12일

MariaDB

목록 보기
11/13
post-thumbnail

트랜잭션 (Transaction)

  • 한번에 수행되어야 하는 논리적인 작업 처리 단위
  • 물리적인 작업 처리 단위는 SQL 문장
  • 데이터베이스에서 작업의 단위로 Transaction 이란 개념을 도입한 이유는 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서이다.
  • RDBMS에서는 어디서부터 어디까지가 트랜잭션인지 정해줄 수 있기 때문에 RDBMS를 사용하는 것이 좋다

3. 트랜잭션의 성질

  • 원자성(Atomicity) : All or Nothing, 하나의 트랜잭션은 전부 처리하던지, 하나도 처리를 하지 않아야 한다.
  • 일관성(Consistency) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 상태를 유지해야 한다.
  • 독립성(Isolation) : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는것을 의미한다.
  • 지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다.

2. 트랜잭션 처리방법

  • Auto Commit : 하나의 SQL이 성공적으로 수행되면 자동으로 commit
  • Manual Commit : DML의 경우에는 사용자가 직접 commit을 해야만 commit 되는 방식

3. TCL (Transaction Control Language)

  • Commit : 현재 트랜잭션을 완료
  • SavePoint : 중간 저장점 생성
  • Rollback : 현재 트랜잭션을 취소하거나 중간 저장점으로 돌아가는 명령

기본으로 auto-commit이 설정되어 있음

manual commit 으로 바꾸기

-- 데이터 삭제
delete from emp where ename = 'SCOTT';

-- 확인
select * from EMP;

-- 작업 취소
rollback;

-- 확인 : 이전에 수행했던 데이터 삭제 작업이 취소된다.
select * from EMP;

-- 데이터 추가
insert into DEPT values(50, '총무', '서울');

-- 작업 완료 : 변경 내역이 반영
commit;

-- 작업 취소
rollback;

-- 확인 : 이미 commit된 작업은 취소 불가능
select * from dept;

자동 commit

  • DML 이외의 DDL이나 DCL 명령이 성공한 경우 자동 commit이 발생
  • 접속이 정상 종료되는 경우
-- 데이터 추가
insert into DEPT values(60, '영업', '철원');

-- 테이블 삭제
drop table tstaff;

-- 작업 취소
rollback;

-- 확인 : drop은 ddl 문장이므로 성공하면 자동으로 commit됨
-- 따라서 rollback 불가능
select * from tstaff;

자동 Rollback

  • 비정상적으로 종료되는 경우

Save Point

  • 현재의 트랜잭션을 작게 분할
-- 데이터 추가
insert into DEPT values(70, '비서', '파주');

-- 저장점 생성
savepoint s1;

-- 데이터 추가
insert into DEPT values(80, '회계', '포천');

-- 데이터 확인 : 80까지 저장되어 있음 
select * from dept;

-- 작업취소 : 70이 실행되기 전까지 돌아감
-- rollback;

-- 작업취소 to 저장점 : 80 실행 전으로 돌아감(저장점)
rollback to s1;

-- 데이터 확인 : 70까지 저장되어 있음
select * from dept;

0개의 댓글