저자 : 아사이 아츠시
출판 : 한빛미디어
발매 : 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으로 삭제를 취소할 수 있음.
'Study > DB' 카테고리의 다른 글
[SQL 첫걸음] 8장.데이터베이스 설계 - 35.정규화 (0) | 2018.09.30 |
---|---|
[SQL 첫걸음] 8장.데이터베이스 설계 - 34.데이터베이스 설계 (0) | 2018.09.30 |
[SQL 첫걸음] 7장.복수의 테이블 다루기 - 32.테이블 결합 (0) | 2018.09.27 |
[SQL 첫걸음] 7장.복수의 테이블 다루기 - 31.집합 연산 (0) | 2018.09.27 |
[SQL 첫걸음] 6장.데이터베이스 객체 작성과 삭제 - 30.뷰 작성과 삭제 (0) | 2018.09.27 |