스냅샷 (자료구조) : 실제 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 |