Study/DB

[SQL 첫걸음] 8장.데이터베이스 설계 - 36.트랜잭션

momo02 2018. 9. 30. 18:44
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 

발매 : 2015.11.01



1. 트랜잭션

- 발주처리의 예로 주문이 발생했을 경우, 주문 테이블에는 INSERT 한 번, 주문상품 테이블에는 주문된 상품 수 만큼 INSERT명령이 실행됨.

ex) 발주처리

INSERT INTO 주문 VALUES(4, '2018-09-30', 1);

INSERT INTO 주문상품 VALUES(4, '0003', 1);

INSERT INTO 주문상품 VALUES(4, '0004', 2);

이때, 세 번째 INSERT 명령에서 에러가 발생했다고 치면, 

트랜잭션 기능을 사용하지 않을 경우. 앞서 실행한 두 개의 INSERT명령에 의해 주가된 데이터를 DELETE명령으로 삭제하는 처리가 필요함. 이는 매우 번거로움. 




2. 롤백과 커밋

- 위 경우처럼 몇 단계로 처리를 나누어 SQL명령을 실행하는 경우에 트랜잭션을 자주 사용. 트랜잭션을 사용해 데이터를 추가한다면 에러가 발생해도 트랜잭션을 롤백(rollback)해서 종료할 수 있음. 롤백하면 트랜잭션 내에서 행해진 모든 변경사항을 없었던 것으로 돌림. 

아무런 에러가 발생하지 않는다면 변경사항을 적용하고 트랜잭션을 종료하는데 이때 커밋(commit)을 사용. 


- mysql클라이언트에서 명령을 실행할 때는 자동커밋이 켜져 있는데, 자동커밋을 끄기 위해서는 명시적으로 트랜잭션을 시작을 선언할 필요가 있음. 트랜잭션을 시작할 때는 START TRANSACTION 명령을 사용. 

- 트랜잭션을 종료하기 위해 변경된 내용을 적용한 후 종료하는 '커밋'과 적용하지않고 종료하는 '롤백'의 두가지 방법이 있음.

커밋 시에는 COMMIT 명령을, 롤백은 ROLLBACK 명령을 사용.


ex) 트랜잭션 내에서의 발주처리 

START TRANSACTION

INSERT INTO 주문 VALUES(4, '2018-09-30', 1);

INSERT INTO 주문상품 VALUES(4, '0003', 1);

INSERT INTO 주문상품 VALUES(4, '0004', 2);

COMMIT;

=> 이렇게 트랜잭션을 시작해서 SQL명령을 실행하고 COMMIT 또는 ROLLBACK명령으로 트랜잭션을 종료하는 일련의 처리방법을

'트랜잭션을 걸어서 실행한다' 또는 '트랜잭션 내에서 실행한다'라고 말함. 




3. 트랜잭션 사용법

- 트랜잭션 내에서 실행하는 복수의 SQL 명령은 세트 단위로 유효/무효가 되므로, 반드시 세트로 실행하고 싶은 SQL명령을 트랜잭션에서 하나로 묶어 실행한다. 

- 트랜잭션을 시작할 때 사용하는 명령은 .. 

MySQL 의 경우 : START TRANSACTION BEGIN도 사용가능 ) 

SQL Server나 PostgreSQL : BEGIN TRANSACTION

Oracle이나 DB2에서 트랜잭션을 시작하는 명령은 따로 없음. (표준화가 진행되지 못한 부분) 

- 자동커밋은 클라이언트 툴의 기능. 미들웨어도 데이터베이스 접속 시 대게 자동커밋을 함. 한편, 데이터베이스 서버에서는 언제나 트랜잭션을 걸 수 있는 상태로 SQL 명령이 실행됨. 

- DELETE 명령 역시 트랜잭션 내에서 실행하는 경우 ROLLBACK으로 삭제를 취소할 수 있음. 

반응형