mysql 학습정리 : 트랜잭션 (rollback, commit, savepoint, truncate)

2021. 10. 14. 16:28·CS/MySql 정리

DB 트랜잭션

  • 데이터 처리의 한 단위를 말한다.
  • DB는 데이터를 저장, 수정, 삭제하는 작업을 바로 물리적인 하드디스크에 저장된 데이터에 적용하지 않는다. (메모리단에서 적용됨)
  • 이는 개발자가 실수로 잘못된 명령문을 입력했을 때 다시 원래 상태로 되돌리기 위한 안전 장치이다.
  • 개발자가 Commit을 하기 전까지 입력한 명령문은 메모리에서만 동작하다가 커밋이 발생하면 그때 하드디스크에 반영하게 된다.
  • 데이터에 대한 작업을 하기 위해 입력하는 명령문들의 시작부터 커밋까지가 하나의 트랜잭션이다.

 

참고) MYSQL Workbench에서 COMMIT, ROLLBAKCK을 테스트하기 위해서 자동 커밋을 꺼준다.

new connections user auto commit mode를 끔

 

ROLLBACK

  • 데이터의 저장, 삭제, 수정 등의 작업을 하고 난 후 원래의 상태로 되돌리는 작업이다.
  • 커밋 이후에는 롤백을 해도 커밋 전으로 돌아갈 수 없다.
-- rollback 사용하기
commit;
select * from test_table3;
delete from test_table3;
rollback;
select * from test_table3; -- 커밋 시점으로 돌아가므로 delete문이 롤백된다.

-- 커밋이후에는 rollback을 해도 적용 X
select * from test_table3;
delete from test_table3;
commit;
rollback; -- 커밋시점으로 그대로이다.
select * from test_table3;

delete from test_table3
rollback

 

COMMIT

  • 하나의 트랜잭션을 물리적인 데이터베이스에 적용하는 작업.
  • 커밋을 하면 롤백을 해도 되돌릴 수 없다.
-- commit 사용하기
select * from test_table3;
delete from test_table3;
commit;
rollback; -- commit 이전 상태로 되돌아갈 수 없다.

 

SAVEPOINT

  • save point를 지정하면 rollback시 해당 지정위치로 복원이 가능하다.
  • save point 명령어로 지점을 지정하고 rollback 명령어로 복원한다.
-- savePoint 사용하기
commit;
select * from test_table3;

update test_table3 set data2='새로운 문자열', data3=44.44 where data1 = 5;
savepoint aa;
delete from test_table3 where data1 = 4;
select * from test_table3;
rollback to aa;
select * from test_table3;

-- 롤백이 commit시점이 아니라, savepoint aa를 선언한 시점이 된다.
-- 따라서 update문은 적용이 되어있고, delete문은 롤백된다.

 

 

TRUNCATE

  • 지정된 테이블의 모든 데이터를 지운다.
  • 커밋이 자동으로 되므로 rollback이 불가능하다.
  • delete문은 DB에 바로 반영하지 않고 메모리에 적용 후 커밋이 되어야 적용이 되므로 ROLLBACK이 가능하다.
  • 반면에 truncate는 수행하는 순간 바로 커밋을 날려서 DB에 반영하므로 ROLLBACK이 불가능하다.
반응형
저작자표시 (새창열림)

'CS > MySql 정리' 카테고리의 다른 글

mysql 학습정리 : 테이블 변경 (rename, alter, drop)  (0) 2021.10.15
mysql 학습정리 : 데이터 저장, 수정, 삭제 (insert, update, delete)  (1) 2021.10.13
mysql 학습정리 : CREATE문을 이용하여 DB, TABLE 생성  (1) 2021.10.12
mysql 학습정리 : set _ 집합연산  (1) 2021.10.11
mysql 학습정리 : 서브 쿼리  (1) 2021.10.09
'CS/MySql 정리' 카테고리의 다른 글
  • mysql 학습정리 : 테이블 변경 (rename, alter, drop)
  • mysql 학습정리 : 데이터 저장, 수정, 삭제 (insert, update, delete)
  • mysql 학습정리 : CREATE문을 이용하여 DB, TABLE 생성
  • mysql 학습정리 : set _ 집합연산
구름뭉치
구름뭉치
구름의 개발일기장
  • 구름뭉치
    구름 개발일기장
    구름뭉치
  • 전체
    오늘
    어제
    • ALL (294)
      • 프로젝트 (23)
        • 토스페이먼츠 PG 연동 시리즈 (12)
        • JWT 방식 인증&인가 시리즈 (6)
        • 스우미 웹 애플리케이션 프로젝트 (1)
        • 스프링부트 기본 보일러 플레이트 구축 시리즈 (2)
        • 마이크로서비스 아키텍쳐 시리즈 (1)
      • 스프링 (43)
        • 스프링부트 API 설계 정리 (8)
        • 스프링부트 RestAPI 프로젝트 (18)
        • 스프링부트 WebSocket 적용기 (3)
        • 스프링 JPA 정리 시리즈 (5)
        • 스프링 MVC (5)
        • 스프링 배치 (2)
        • 토비의 스프링 정리 (2)
      • 기술 학습 (10)
        • 아파치 카프카 (9)
        • 클린 코드 (4)
        • 디자인 패턴의 아름다움 (2)
        • 모던 자바 인 액션 (7)
        • JVM 스레드 딥다이브 (7)
      • Web (25)
        • 정리글 (20)
        • GraphQL 정리글 (2)
        • Jenkins 정리글 (3)
      • 취업 (6)
      • CS (77)
        • 네트워크 전공 수업 정리 (11)
        • OSI 7계층 정리 (12)
        • 운영체제 정리 (19)
        • 데이터베이스 정리 (5)
        • MySql 정리 (17)
        • GoF의 Design Pattern 정리 (12)
      • 알고리즘 (70)
        • 백준 (56)
        • 프로그래머스 (12)
        • 알고리즘 정리본 (1)
      • 기초 지식 정리 (2)
      • 일상 (8)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    크로아티아
    마우스
    키보드 손목 받침대
    마우스 패드
    레이저
    류블라냐
    mx master s3 for mac
    동유럽
    부다페스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
구름뭉치
mysql 학습정리 : 트랜잭션 (rollback, commit, savepoint, truncate)
상단으로

티스토리툴바