티스토리 뷰
DB 트랜잭션
- 데이터 처리의 한 단위를 말한다.
- DB는 데이터를 저장, 수정, 삭제하는 작업을 바로 물리적인 하드디스크에 저장된 데이터에 적용하지 않는다. (메모리단에서 적용됨)
- 이는 개발자가 실수로 잘못된 명령문을 입력했을 때 다시 원래 상태로 되돌리기 위한 안전 장치이다.
- 개발자가 Commit을 하기 전까지 입력한 명령문은 메모리에서만 동작하다가 커밋이 발생하면 그때 하드디스크에 반영하게 된다.
- 데이터에 대한 작업을 하기 위해 입력하는 명령문들의 시작부터 커밋까지가 하나의 트랜잭션이다.
참고) MYSQL Workbench에서 COMMIT, ROLLBAKCK을 테스트하기 위해서 자동 커밋을 꺼준다.
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;
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) (0) | 2021.10.13 |
mysql 학습정리 : CREATE문을 이용하여 DB, TABLE 생성 (0) | 2021.10.12 |
mysql 학습정리 : set _ 집합연산 (0) | 2021.10.11 |
mysql 학습정리 : 서브 쿼리 (0) | 2021.10.09 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday