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 덕분에 다시 데이터가 돌아온다

 

 

 

 

 

 

출처

https://jminie.tistory.com/32