DBMS가 데이터 베이스를 다룰 때 사용하는 작업 단위
ACID 성질
원자성(Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 한다.
일관성(Consistency) : 트랜잭션을 수행하기 전, 수행한 후 데이터베이스는 항상 일관된 상태를 유지해야 한다.
독립성(Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다.
지속성(Durability) : 수행을 성공적으로 완료한 후에도 트랜잭션은 영구히 저장되어야 한다. 저장된 DB는 저장 직후 어느 때나 발생할 수 있는 장애 오류에 영향을 받지 않아야 한다.
BEGIN
UPDATE accounts
SET balance = balance - 10000
WHERE user = '구매자';
UPDATE accounts
SET balance = balance + 10000
WHERE user = '판매자';
END
중간에 오류가 발생되는 것 때문에 모두 수행되거나 모두 수행되지 않아야 한다.
START TRANSACTION
/* 판매자 계좌 읽어오기 */ - 1
/* 구매자 계좌 읽어오기 */ - 2
/* 잔고 확인 */
/* 구매자 인출 */ - 3
UPDATE accounts
SET balance = balance - 10000
WHERE user = '구매자';
/* 판매자 입금 */ - 4
UPDATE accounts
SET balance = balance + 10000
WHERE user = '판매자';
COMMIT /* 부분완료 */
/* 구매자 계좌 기록 */ -5
/* 판매자 계좌 기록 */ -6
lock 이라는 것을 이용하여 트랜잭션이 다루는 데이터를 다른 트랜잭션이 접근하지 못하도록 막아 대기 상태로 만든다.