01. 트랜잭션
2) 작업 수행에 필요한 SQL문의 모임이다.
3) 장애 발생 시, 복구 작업이나 병행 제어 작업을 위한 중요한 단위로 사용한다.
4) 데이터베이스의 무결성과 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 제대로 정의하고 관리해야 한다.
➡️ DBMS가 데이터베이스를 다룰 때, 사용하는 작업(프로그램)의 단위
➡️ 데이터의 무결성을 유지하기 위해 원자성, 일관성, 고립성, 지속성의 성질을 갖는다.
구문
👉🏻START TRANSACTION(SQL 문)
COMMIT; / ROLLBACK;
개념
👉🏻보통 단일 SQL문을 다루기도 하지만, 여러 개의 SQL문을 순차적으로 수행하기도 한다.1) 데이터베이스에서 데이터를 조작할 때, 장애가 발생하는 경우가 있다. 트랜잭션은 장애 발생 시, 데이터를 복구하는 작업 단위가 된다.
2) 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다루며 진행될 때, 트랜잭션은 이 작업을 서로 분리하는 단위가 된다.
특징
👉🏻ACID원자성 - Automicity
➡️ 트랜잭션이 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다.
➡️ 일부만 수행되는 일이 없도록 전부 수행 또는 아예 수행하지 않아야 한다.
일관성 - Consistency
➡️ 트랜잭션은 데이터베이스의 일관성을 유지해야 한다.
독립성(격리성) - Isolation
➡️ 여러 트랜잭션이 동시에 수행될 때, 각 트랜잭션은 다른 트랜잭션의 방해를 받지 않고, 독립적으로 작업을 수행해야 한다.
영속성(지속성) - Durability
➡️ 트랜잭션이 정상적으로 완료 또는 부분 완료한 데이터는 반드시 데이터베이스에 기록되어야 한다.
수행 과정
👉🏻성공 : 수행 시작 ➡️ 수행 ➡️ 부분 완료 ➡️ COMMIT ➡️ 완료실패 : 수행 시작 ➡️ 수행 ➡️ 실패 ➡️ ROLLBACK ➡️ 철회
상태
👉🏻활동 상태➡️ 트랜잭션이 현재 수행 중인 상태
부분 완료
➡️ 트랜잭션의 마지막 연산이 실행을 종료한 직후의 상태
- 완료 : 수행 → DBMS가 데이터베이스에 기록(COMMIT)을 완료해야 정상 수행. 문제가 발생해서, DBMS가 변경 내용을 데이터베이스에 기록하지 못하면 실패 상태.
완료
➡️ 트랜잭션이 성공적으로 완료되어 COMMIT 연산을 실행한 상태(데이터베이스에 최종 결과를 반영한 상태)
실패
➡️ 트랜잭션을 중간에 중단하였거나, 부분 완료 상태에서 변경 내용을 데이터베이스에 저장하지 못한 상태(수행한 작업을 모두 복구 진행)
철회
➡️ 트랜잭션의 수행 실패로 ROLLBACK 연산을 진행한 상태
AUTOCOMMIT
👉🏻SELECT @@AUTOCOMMIT; (자동으로 커밋되는지 확인하기)➡️ 1 : autocommit ON
➡️ 2 : autocommit OFF
SAVEPOINT
👉🏻부분 롤백, 여러개 작성 가능.ROLLBACK TO SAVEPOINT 이름;
예시
-- autocommit 확인 SELECT @@AUTOCOMMIT -- 1(ON)이라면, 0으로 바꿔준다. SET @@AUTOCOMMIT := 0; -- 트랙잭션 구문 시작 START TRANSACTION -- member2 테이블 전체 조회 SELECT * FROM tb_member2; -- member2 테이블에서 아이디가 id005인 회원의 이름을 홍0505로 바꾼다. UPDATE tb_member2 SET tb_member2.m_name = '홍0505' WHERE tb_member2.m_id = 'id005'; -- SAVEPOINT 지정하기 SAVEPOINT A; -- member2 테이블에서 아이디가 id013인 회원의 데이터를 삭제한다. DELETE FROM tb_member2 WHERE tb_member2.m_id = 'id013'; -- 부분 철회 ROLLBACK TO SAVEPOINT A; -- 완료 COMMIT; -- 트랜잭션 작업 완료 후, autocommit을 다시 1로 변경해준다. SET @@AUTOCOMMIT := 1; SELECT @@AUTOCOMMIT;
tag : #DB #데이터베이스 #트랜잭션 #ACID #COMMIT #ROLLBACK #SAVEPOINT
Uploaded by N2T