SQL 기본 및 활용 (3) - 트랜잭션
Transaction(트랜잭션)
: 데이터베이스의 논리적 연산단위. 분리될 수 없는 한 개 이상의 데이터베이스
- ALL | Nothing 의 개념
- 하나 이상의 SQL문이 포함된다.
[개요]
- 트랜잭션 : 세부적인 연산들의 집합 -> 대상 DML (UPDATE, INSERT, DELETE)
- 커밋 : 반영된 데이터를 데이터베이스에 반영시킴
- 롤백 : 트랜잭션 시작 이전의 상태로 되돌리기
특성 | 설명 |
원자성 | 트랜잭션에서 정의된 연산들은 모두 실행되거나 실행되지 않아야 한다. (All or Nothing) |
일관성 | 트랜잭션 실행 이전에 무언가 잘못되어 있지 않았었다면, 실행 후에도 잘못되어 있지 않아야 한다. |
고립성 | 트랜잭션 실행 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 안된다. |
지속성 | 트랜잭션 성공적으로 수행시 그 트랜잭션이 갱신한 데이터베이스들은 영구히 저장된다. |
1. COMMIT
UPDATE PLAYER SET HEIGHT = 100;
COMMIT;
INSERT INTO PLYAER (PLAYER_ID, TEAM_ID< PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO) VALUES ('1997035', 'K02', '이윤재', 'GK', 182, 82, 1);
COMMIT;
* 커밋 이후 프로세스
[데이터 변경 사항이 데이터베이스에 반영] - [이전 데이터 소실] - [모든 사용자가 결과를 볼 수 있음] - [락킹(LOCKING) 풀리고, 다른 사용자가 행을 조작할 수 있게 됨]
* SQL Server는 기본 옵션이 AUTO COMMIT 이다. 따라서 사용자가 COMMIT 이나 ROLLBACK을 해 줄 필요가 없다.
2. ROLLBACK
테이블 내 입력, 수정, 삭제한 데이터에 대하여 COMMIT 하기 전에 변경사항을 취소할 수 있다.
ROLLBACK;
* 롤백 이후 프로세스
[데이터 변경사항 취소] - [이전 데이터 재저장] - [관련된 행 잠금(LOCKING) 해제] - [다른 사용자가 행을 조작할 수 있게 됨]]
→ COMMIT, ROLLBACK을 사용함으로써
"데이터 무결성 보장", 데이터의 변경 사항을 확인할 수 있다. 논리적으로 연관된 작업 그룹핑 가능하다.
3. SAVEPOINT (저장점)
저장점이 있으면 롤백시 저장점까지만 롤백을 할 수 가 있다. (트랜잭션 일부만 롤백)
(Oracle)
SAVEPOINT SVPT1;
ROLLBACK TO SVPT1;
(SQL Server)
SAVE TRANSACTION SVPT1;
ROLLBACK TRANSACTION SVPT1;
ex) 새로운 트랜잭션을 시작하기 전에, PLAYER 테이블의 데이터 건수와 몸수게가 100인 선수의 데이터 건수를 확인한다.
SELECT COUNT (*) FROM PLAYER;
COUNT(*);
SAVEPOINT SVPT1;
SELECT COUNT(*) FROM PLAYER WHERE WEIGHT = 100;
COUNT(*);
SAVEPOINT SVPT2;
ROLLBACK TO SVPT1;