여태까지 SQL 명령어들에 대해 알아보았습니다. 이 명령어들은 하나같이 테이블을 관리해주는 역할을 하죠. 그러나, SQL을 다루는 중에 우리가 너무 당연하게 여겨 놓치고 있는 것이 있습니다. 너무 알아서 해주어서, 미처 존재를 모르고 있던 것인데요.

(출처: John Dearduffhttps://bit.ly/3E1MDcs)
우리는 여태까지 한번도 쿼리문을 작성하고 실행하는 것만 알고 그를 저장해주는 기능은 일체 쓰지 않았습니다. 당연하죠, 여태까지 DBeaver가 알아서 해주고 있었으니까요.
하지만 이 둘은 중요합니다. 보통 때는 자동적으로 해주는 것을 쓰다가도, 이 존재를 모르면 SQL에 대해 알고 있습니다 라고 할 수 없을 정도니까요.
그럼 천천히 알아가겠습니다.

"변경 내역 영구 저장"
커밋이라는 단어가 꽤 생소하실 겁니다. 이는 모든 작업을 정상적으로 처리하겠다고 확정 짓는 명령어인데요. 이는 트랜젝션이라는 쿼리문이 수정된 구간에서 그 데이터를 데이터베이스에 저장하고 반영하기 위해서 변경된 내용을 모두 영구 저장 시키는건데요.
이를 수행하게 되면, 하나의 변화된 과정 (트랜젝션)을 종료합니다. 그리고 그 작업 내용을 DB에 저장하죠.
후에, 이 커밋 데이터는 모든 사용자가 변경된 결과를 볼 수 있게 됩니다.
코드로 볼까요?
보통 우리가 사용하는 DBMS에서는 커밋을 알아서 해줍니다. 우리가 사용하는 DBeaver에서도
자동 커밋이 활성화되어있는데요. 수동으로 설정해주는 방법은 아래와 같습니다.


"변경 내역 취소 및 이전 내역 복구"
롤백은 이에 정반대라고 할 수 있겠습니다.
이는 작업 중 문제가 발생했을 때, 다시 되돌아가기 위하여 트랜젝션 과정을 취소하고 종료시켜 그 처리가 되기 이전의 상태로 되돌리는 명령어입니다. 즉, 이전의 커밋이 이루어진 구간까지만 복구를 해주는 거죠.
트랜젝션 작업 중 한 곳이라도 문제가 발생하게 되면, 모든 작업을 취소해야 하게 됩니다. 따라서 이는 커밋을 통해 단위별로 묶어두는 것이 효과적이어서 롤백이 유용하게 작용하게 됩니다.
또한, 데이터의 무결성도 보존됩니다.
코드로 볼까요?
롤백도 단순합니다. 아래와 같이 작성해주시면 수동으로 롤백이 실행됩니다.

우리가 여태까지 사용했듯 자동으로 커밋 혹은 롤백 해주는 경우가 있습니다. 커밋은 자동으로 설정해주면 툴에서 알아서 해주지만 롤백에서는 경우가 다른데요.
1. 자동으로 롤백 되는 경우?
이는 비정상적으로 데이터베이스를 종료했을 경우에 한합니다. 우리가 정상적으로 닫지 않고 그냥 닫았다면 자동으로 마지막 자동 커밋이 이루어진 곳까지 복구해줍니다.
2. 자동으로 커밋 되는 경우?
그럼 커밋은 어떨까요?
이는 많은 경우를 예로 볼 수 있습니다. 그는 아래와 같습니다.
- DDL문 사용
- DCL문 사용 권한
- insert, delete, update 작업 후 커밋 안하고 오라클 정상 종료
(정상 커밋 자동으로 해주고 오라클 종료)
이로서 커밋과 롤백에 대해서 알아보았습니다. 다음 포스팅에서는 컬럼 속성에 대해 알아보겠습니다.