흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)

(MySQL) 기초 문법(트랜젝션) 본문

MySQL

(MySQL) 기초 문법(트랜젝션)

흰둥아솜사탕 2023. 3. 21. 18:00
728x90
반응형

트랜젝션(Transaction)

  • 분할이 불가능한 업무처리의 단위
  • 한꺼번에 수행되어야 할 연산 모음

commit

  • 모든 작업들을 정상 처리하겠다고 확정하는 명령어로서, 해당 처리 과정을 DB에 영구적으로 저장

rollback

  • 작업 중 문제가 발생되어 트랜젝션의 처리과정에서 발생한 변경사항을 모두 취소하는 명령어
start transaction
    블록안의 명령어들은 하나의 명령어처럼 처리됨
    ...
    성공하던지, 실패하던지 둘 중 하나의 결과가 됨
    문제가 발생하면 rollbak;
정상 적인 처리가 완료되면 commit;

트랜젝션의 특징

  • 원자성: 트랜젝션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 함
  • 일관성: 트랜젝션의 작업 처리 결과가 항상 일관성이 있어야 함
  • 독립성: 어떤 하나의 트랜젝션이라도, 다른 트랜젝션의 연산에 끼어들 수 없음
  • 영구성: 결과는 영구적으로 반영되어야 함

자동 커밋 확인

  • autocommit: ON -> 자동으로 commit 해줌
show variables like '%commit%';

autocommit 확인

# set autocommit=0 (off), set autocommit=1 (on)
set autocommit = 0;

autocommit off

product 테이블

select * from product;

product 테이블

트랜젝션 commit 및 rollback

start transaction; # 트랜젝션의 시작. commit 또는 rollbak으로 끝내야 함
insert into product values ('100005', '고철', '팔아요', 100, now());
select * from product;
commit; # 트랜잭션을 DB에 적용

product 테이블

start transaction;
insert into product values ('100006', '공병', '팔아요', 50, now());
select * from product;
rollback; # 트램젝션을 취소하고 start transaction 실행 전 상태로 롤백함

왼쪽(rollback 이전) 오른쪽(rollback 이후)

트랜젝션의 예외

  • DDL문에(create, drop, alter, rename, truncate) 대해 예외를 적용 -> rollback 대상이 아님

truncate

  • 개별적으로 행을 삭제할 수 없으며, 테이블 내부의 모든 행(데이터)를 삭제
  • rollback이 불가능
  • 트랜젝션 로그에 한 번만 기록하므로 delete 구문보다 성능 면에서 빠름
  • truncate table 테이블명 = delete from 테이블명

product_new 테이블

 

start transaction;
delete from product_new;
select * from product_new;
rollback;

rollback 이전 product_new 테이블
rollback 이후 product_new 테이블

start transaction;
truncate table product_new;
select * from product_new;
rollback;

product_new 테이블

delete문에는 rollback이 작동하지만 truncate는 rollback이 작동해도 안에 데이터가 돌아오지 않는다.
728x90
반응형

'MySQL' 카테고리의 다른 글

(MySQL) 기초 문법(인덱스)  (0) 2023.03.21
(MySQL) 기초 문법(뷰)  (0) 2023.03.21
(MySQL) 사용자  (1) 2023.03.21
(MySQL) 기초 문법(테이블 복사)  (0) 2023.03.20
(MySQL) 기초 문법(문자열 함수)  (0) 2023.03.20
Comments