하나 이상의 데이터베이스 연산이 묶여서 하나의 논리적인 작업 단위로 처리되는 것을 말한다.
은행 어플리케이션의 경우
원자성(Atomicity): 만일 출금 연산이 성공하고 입금 연산이 실패하면, 이전 상태로 롤백되어야 한다. 롤백 시키기 위하여 출금 연산과 입금 연산을 하나의 트랜잭션으로 묶어서 처리한다. 그리하면 하나의 연산이 실패했을 경우 전체 작업이 롤백된다.
일관성(Consistency): 트랜잭션 실행 전에 데이터베이스를 락(lock)하여 다른 사용자가 데이터를 수정하지 못하도록 한다.
격리성(Isolation): 동시에 여러 개의 계좌 이체 작업이 발생할 수 있으므로, 트랜잭션 간 상호 간섭을 방지해야 한다. 트랜잭션 간 격리 수준(Isolation level)을 설정하여 다른 트랜잭션의 영향을 받지 않도록 합니다.
지속성(Durability): 트랜잭션이 완료되었을 때, 데이터베이스에 변경 내용을 저장하고 장애가 발생해도 이전 상태로 롤백되지 않도록 복구와 백업 작업을 수행합니다.
-- 트랜잭션 시작
START TRANSACTION;
-- Customers 테이블에 새로운 데이터 삽입
INSERT INTO Customers (customer_id, customer_name, city)
VALUES (1, 'John', 'New York');
-- Orders 테이블에 새로운 데이터 삽입
INSERT INTO Orders (order_id, customer_id, order_date, total_amount)
VALUES (1, 1, '2023-05-11', 100.00);
-- 만약 데이터 삽입 중 에러가 발생하면 롤백
ROLLBACK;
-- 에러가 발생하지 않으면 커밋
COMMIT;