1. 트랜잭션이란? |
- 대부분의 데이터베이스는 데이터를 저장하고 수정하고 삭제하는 작업을 바로바로 물리적인 하드디스크에 반영하지 않음
- 이는 개발자가 실수로 잘못된 명령문을 입력했을 경우 다시 원래 상태로 되돌리기 위한 안전장치
- 따라서 개발자가 commit을 하기 전까지 입력한 명령문들은 메모리에서만 동작하고 물리적인 하드디스크에 반영되지 않고 commit하는 시점에 하드디스크에 반영됨
- 개발자가 데이터 작업을 하기 시작한 명령문부터 커밋하기까지를 하나의 트랜잭션이라고 부르며 이걸 데이터베이스에서 데이터 처리의 한 단위 취급함
2. 자동 커밋 기능 해제하기 |
MySQL Workbench는 기본적으로 자동으로 커밋작업이 발생하는 기능이 활성화되어 있음
즉 롤백기능을 활용하려면 이 기능을 off해줘야 함
위 사진에서 Preferences -> SQL Execution -> New connections use auto commit mode 체크해제 -> 재접속
자동 커밋이 꺼지고 직접 커밋을 해줘야만 적용되게 설정됨
DML만 자동 커밋되지 않게 해주는 것이고 TRUNCATE같은건 바로 하드디스크에 적용되므로 주의해야함
체크해제 했다면 이제 DML을 하드디스크에 반영하려면 COMMIT; 쿼리를 입력해줘야 함
3. ROLLBACK |
-- 데이터 삭제하기
delete from test_table1;
-- 롤백하여 되돌리기
rollback;
select * from test_table1;
-- 잘 되돌아 오는걸 확인할 수 있음
DML인 INSERT / DELETE / UPDATE는 ROLLBACK이 가능하지만
TRUNCATE는 바로 데이터베이스에 반영하므로 ROLLBACK이 불가능함
4. COMMIT |
하나의 트랜잭션을 물리적인 데이터베이스에 적용하는 작업
COMMIT을 하면 ROLLBACK을 해도 되돌릴 수 없음
-- 커밋하고 롤백으로 되돌려보기
delete from test_table1;
commit;
select * from test_table1;
rollback;
select * from test_table1; -- 데이터가 복구되지 않는다.
5. SavePoint |
SavePoint를 지정하면 Commit을 했더라도 지정된 위치로 RollBack할 수 있음
-- SavePoint 활용하기
savepoint aa; -- savepoint를 지정하고
commit; -- commit을 하고
delete from test_table1; -- 데이터를 삭제해도
rollback to aa; -- savepoint 덕분에 다시 데이터가 돌아온다
출처