///////
Search
4️⃣

트랜잭션 개요

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을 안해도 히스토리로그로 질의를 기록했기 때문에 질의적용된 데이터 값이 출력된다.
세션 별 트랙잭션 예시로 보는 히스토리로그의 역할