1. 트랜잭션이란?
- 데이터베이스 상태를 변경하기 위한 작업의 논리적단위
- 검색, 삽입, 수정, 삭제 명령을 포함하는 컴퓨터 프로그램에 의해 수행된다.
•
트랙잭션을 관리하는 것은 논리적 처리 단위를 단계로 나누어 해당 단위가 처리 중 오류가 발생하면 단위 실행 전으로 복귀 시킬 수 있게 하는 장치이다.
2. 명시적인 트랜잭션
•
트랜잭션의 범위를 명시적으로 선언 하는 것
•
BEGIN , START TRANSACTION 구문을 사용하여 트랜잭션을 시작할 수 있다. ( 구문은 DBMS마다 다르다.)
•
구조
BEGIN; # 트랜잭션의 시작
…(질의)
COMMIT; # 종료 ( COMMIT or ROLLBACK )
SQL
복사
3. COMMIT 과 ROLLBACK
COMMIT 과 ROLLBACK
•
둘 다 트랜잭션의 종료 구문이지만 차이점이 있다. COMMIT 은 질의 결과를 테이블에 반영하며, ROLLBACK 은 BEGIN 이전 (트랜잭션 이전) 으로 돌아가는 것이라 테이블에 질의 결과가 반영되지 않는다.
•
예시
테이블명: GOODS
mysql> BEGIN;
# 재고 2개를 감소시키는 질의
mysql> UPDATE GOODS SET GD_STOCK = GD_STOCK - 2 WHERE GD_ID = 1;
SQL
복사
mysql> ROLLBACK;
mysql> SELECT * FROM GOODS WHERE GD_ID = 1;
+-------+---------+---------+----------+
| GD_ID | GD_NAME | GD_COST | GD_STOCK |
+-------+---------+---------+----------+
| 1 | apple | 3000 | 2 |
+-------+---------+---------+----------+
SQL
복사
mysql> COMMIT;
mysql> SELECT * FROM GOODS WHERE GD_ID = 1;
+-------+---------+---------+----------+
| GD_ID | GD_NAME | GD_COST | GD_STOCK |
+-------+---------+---------+----------+
| 1 | apple | 3000 | 0 |
+-------+---------+---------+----------+
SQL
복사
DBMS Connector 에서 트랜잭션 예시 - java/JDBC
Auto-Commit
•
보통의 DBMS에서 Auto-Commit을 default로 설정해놓기 때문에, 사용자가 명시적인 트랜잭션 구문을 작성하지 않더라도 모든 질의가 트랜잭션이 된다.
•
우리가 commit을 하지 않아도 자동 commit이 되게 하는 기능이라 구문을 작성하지 않아도 데이터 변경이 테이블에 반영되는 것이다.
•
Auto-Commit을 꺼주는 것은 명시적인 트랜잭션 구문을 사용하겠다는 것과 유사하다.
// Auto-Commit 설정여부 확인 -> 0 미설정, 1 설정
SELECT @@AUTOCOMMIT;
// Auto-Commit 끄는 방법
SET autocommit = 0;
SQL
복사
히스토리로그
•
DBMS에서는 데이터베이스의 상태를 변경시키는 질의를 기록하기 위해 히스토리 로그를 이용
•
히스토리 로그는 DBMS마다 명칭이 다르다. { MySQL : Undo Log }, { mariadb : general_log }
•
현재 세션에서는 commit을 안해도 히스토리로그로 질의를 기록했기 때문에 질의적용된 데이터 값이 출력된다.
세션 별 트랙잭션 예시로 보는 히스토리로그의 역할