티스토리 뷰

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이 불가능하다.
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday