개발 공부/SQL

COMMIT / ROLLBACK

공부하는개발자_ 2023. 6. 20. 23:42

 

 

 

 

 

스냅샷 (자료구조) : 실제 db자료를 자료구조화 시킨 것. 수정,삭제를 해도 db자료에서 되는 것은 아님.

안전하게 종료되지 못 한 상황이 되는 경우 commit보장되지 않음.

 

commit : 각 행자료와 비교내용이 있으면 변경된 내용이 데이터베이스에 처리해서 저장하는 기능

 

transaction : 일 처리 작업 단위. 

트랜잭션이 없는 경우 insert를 처음하게 될때 생기고 commit하게 되면 완료 됨 => db반영

- 원자성

- 일관성

- 격리성

- 지속성

 

ex) 계좌 이체작업

     ( 101계좌에서 10출금 -> 102계좌로 10입금 )

 

 

CREATE TABLE account (no varchar2(3) primary key, balance number(6));

 


INSERT INTO account(no, balance) VALUES ('101',100); 
INSERT INTO account(no, balance) VALUES ('102',100); 

commit;  --트랜잭션이 없는 경우 insert를 처음하게 될때 생기고 commit하게 되면 완료 됨 => db반영

 

UPDATE account SET balance = balance-10 WHERE no='101'; --트랙잭션 생김
UPDATE account SET balance = balance+10 WHERE no='102';

commit; --트랙잭션 완료 => db반영

 

UPDATE account SET balance = balance-10 WHERE no='101'; --1건: 출금성공
UPDATE account SET balance = balance+10 WHERE no='XXX'; --0건: 입금실패 (계좌 찾지 못했기때문/ error는 아님)

 

UPDATE account SET balance = balance-10 WHERE no='YYY'; --0건: 출금실패 계좌 찾지 못했기때문/ error는 아님)

UPDATE account SET balance = balance+10 WHERE no='102'; --1건: 입금성공

 

ROLLBACK; -- 원상태로 복구하는 명령어. 취소 기능. 이전 트랜잭션이 완료된 상태까지 취소 됨 

 

 

INSERT INTO account(no, balance) VALUES ('103', 0);

SAVEPOINT p1;

 

UPDATE account SET balance = balance+10 WHERE no ='103';

SAVEPOINT p2;

 

DELETE account WHERE no ='103';

 

ROLLBACK TO p2; --DELETE 취소

ROLLBACK TO p1; --UPDATE 취소

ROLLBACK;            --INSERT 취소

 

DELETE account WHERE no = '101';

 

 

 

developer에서 '101'계좌를 삭제 후 sql plus에서 확인해 보면 101계좌 확인 됨.

 

sql plus에서 '102'계좌 삭제 후 developer에서 확인해 보면 102계좌 확인 됨.

 

sql plus에서 삭제했던 102를 developer에서 한번 더 삭제하려고 할때 오류 발생.

delete된 자료에서 update, delete하려고 할때 deadlock오류 발생.

 

sql이 waiting인 상태인 경우 완료된 상태가 아니기 때문에 roll back, 또는 commit을 해주어야 함!!

 

 

 

 

 

'개발 공부 > SQL' 카테고리의 다른 글

제약 조건 / ERD 사용  (1) 2023.06.20
SUBQUERY / DDL/ DML  (5) 2023.06.16
GROUP BY / HAVING/ JOIN/ UNION  (0) 2023.06.15
SQL 함수  (1) 2023.06.14
SQL Developer : SELECT  (2) 2023.06.13