This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| transaction_control_language [2015/09/12 14:50] – 만듦 ledyx | transaction_control_language [2015/09/13 16:41] (current) – 제거됨 ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | = Transaction Control Language = | ||
| - | {{tag> | ||
| - | |||
| - | = Transaction Control Language = | ||
| - | {{tag> | ||
| - | |||
| - | = 기본 개념 = | ||
| - | == Transaction? | ||
| - | * " | ||
| - | * 분할할 수 없는 최소 단위 → **All or Nothing** | ||
| - | * 하나의 Transaction에는 하나 이상의 SQL문 포함 → TCL의 대상이 되는 SQL문은 | ||
| - | |||
| - | === 특성 === | ||
| - | * **Atomicity** : All or Nothing(성공적 실행 or 그대로 유지) | ||
| - | * **Consistency** : Transaction 실행되기 전 DB 내용 잘못X → 실행 후에도 잘못X | ||
| - | * **Isolation** : Transaction 실행 도중 다른 Transaction 영향X | ||
| - | * **Durability** : Transaction 수행 성공 → DB 내용 영구적 저장 | ||
| - | |||
| - | == TCL == | ||
| - | === 효과 (Why use?) === | ||
| - | * 데이터 무결성 보장 | ||
| - | * 영구적인 변경을 하기 전에 | ||
| - | * 논리적으로 연관된 작업을 그룹 지어 처리 가능 | ||
| - | |||
| - | === TCL 수행 이전의 데이터 상태 === | ||
| - | * 단지 Memory Buffer에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능. | ||
| - | * 현재 사용자는 SELECT문으로 결과 확인 가능, 다른 사용자는 현재 사용자가 수행한 명령 결과 확인 불가. | ||
| - | * 변경된 행은 Locking 설정되어 다른 사용자가 변경 불가. | ||
| - | |||
| - | === TCL을 실행하지 않아도 자동 수행 후 Transaction이 종료되는 경우 === | ||
| - | * **DDL**문 실행하면 자동 **COMMIT**. (☞ 당연한 이야기지만, | ||
| - | * DB **정상 종료**하면 자동 **COMMIT**. | ||
| - | * Application **이상 종료**로 DB(Instance) 접속 단절되는 경우 자동 **ROLLBACK**. | ||
| - | |||
| - | == SQL Server에서의 3가지 Transaction 처리 방식 == | ||
| - | * AUTO COMMIT : SQL Server의 기본 방식. DML/DDL을 실행할 때마다 __**DBMS**가 **자동**으로__ Transaction 제어하는 방식. (성공=Commit or 실패=Rollback 자동 수행.) | ||
| - | * 암시적 Transaction : Transaction __**시작**은 **DBMS**가__, | ||
| - | * 명시적 Transaction : Transaction __**시작**, | ||
| - | |||
| - | = 문법 = | ||
| - | == COMMIT == | ||
| - | **" | ||
| - | |||
| - | <sxh sql> | ||
| - | DML문 | ||
| - | |||
| - | COMMIT; --SQL Server는 Auto Commit이라 필요X | ||
| - | </ | ||
| - | |||
| - | == ROLLBACK == | ||
| - | **" | ||
| - | <sxh sql> | ||
| - | DML문 | ||
| - | |||
| - | ROLLBACK; | ||
| - | </ | ||
| - | |||
| - | === SAVEPOINT === | ||
| - | **" | ||
| - | * 현 시점에서 저장점(Save Point)까지 전체 Transaction의 일부만 ROLLBACK 할 경우 사용 (= 복잡한 대규모 Transaction일 때 적합!) | ||
| - | * 동일 이름 지정시 **가장 최근 저장점**이 유효. | ||
| - | * 특정 저장점에서 ROLLBACK 수행 **이후** 저장점은 **무효**. | ||
| - | * 저장점 없이 ROLLBACK 수행 후에는 Transaction 시작 위치로 되돌아간다. (당연한 이야기!) | ||
| - | <sxh sql> | ||
| - | SAVEPOINT SVPT1; | ||
| - | |||
| - | DML문 | ||
| - | |||
| - | ROLLBACK TO SVPT1; | ||
| - | |||
| - | |||
| - | /* SQL Server | ||
| - | SAVE TRANSACTION SVPT1; -- TRANSACTION 대신 TRAN 대체 가능 | ||
| - | |||
| - | DML문 | ||
| - | |||
| - | ROLLBACK TRANSACTION SVPT1; -- TRANSACTION 대신 TRAN 대체 가능 | ||
| - | */ | ||
| - | </ | ||