DBMS

MySQL - 트랜잭션

전주천둥새 2023. 5. 15. 15:52

1. 트랜잭션(Transection)

- 하나의 작업을 수행하기 위해 필요한 데이터베이스 연산들을 모아 놓은것

- 작업 수행에 필요한 SQL 문들의 모임

- 논리적인 작업의 단위

- 장애 발생 시 복구 작업이나 병행 제어 작업을 위한 중요한 단위로 사용됨

- 데이터베이스의 무결성과 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 제대로

정의하고 관리해야 함

1) 트랜잭션 특성

1. 원자성

- 트랜잭션의 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing

- all-or-nothing : 트랜잭션 수행 도중 장애가 발생하면 지금까지 실행한 연산을 모두 취소하고 수행 전

상태로 되돌려야 한다.

2. 일관성

- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 한다.

3. 격리성

- 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없다.

- 여러 트랜잭션이 동시에 수행되더라도 마치 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수

있도록 제어하는 기능 필요

4. 지속성

- 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 영구적이어야 한다.

- 지속성의 보장을 위해서는 장애 발생 시 회복 기능이 필요

2) 트랜잭션의 상태

- 활동상태 : 트랜잭션이 수행을 시작하여 현재 수행 중인 상태

- 부분완료상태 : 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태

- 완료상태 : 트랜잭선이 성공적으로 완료되어 commit 연산을 실행한 상태. 최종 결과를 데이터베이스에 반영하고

데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨

 

- 실패상태 : 장애가 발생하여 트랜잭션의 수행이 중단된 상태

- 철회상태 : 트랜잭션의 수행실패로 rollback연산을 실행한 상태. 지금까지 수행되기 전의 db상태로 되돌리면서 트랜잭선이 종료됨. 철회상태로 종료된 트랜잭션은 상황에따라 다시 수행되거나 폐기됨.

3) 트랜잭션 실습

/* autocommit 값 확인, true(1)일시 false(0)로 값 초기화 */
SELECT @@autocommit;
SET @@autocommit:=0;
SELECT @@autocommit;
/* 트랜잭션 시작 */
START TRANSACTION;
SELECT * FROM tb_member_backup;
/* 롤백할 위치 지정(실행 전) */
SAVEPOINT a;
UPDATE tb_member_backup SET m_name='홍003' WHERE m_id='id003';
/* 롤백할 위치 지정(실행 후) */
SAVEPOINT b;
DELETE FROM tb_member_backup;
/* 쿼리문 오류발생시 지정한 위치로 ROLLBACK */
ROLLBACK TO SAVEPOINT a;
COMMIT;