요약 |
TCL정의 일련의 작업처리를 위한 연관된 dml들의 모임 |
transaction login logout 사이의 모든 dml |
rollback rollback; |
commit commit; |
commit과 무결성 비정상종료 autorollback 정상 종료 autocommit |
부분롤백 dml 실행후 savepoint 지정어; |
----------------------------------------------------------------------------------------------------------------------------------- |
---------------------------------------------------------------------------------------------------------------------------------- |
|
|
TCL이란? |
일련의 작업처리를 위한 연관된 DML들의 모음이다. |
|
특징은 ALL or nothing으로 완전히 실행되던지 아니면 전혀 안되던지 중간의 성격은 없다 . |
all= commit (DB에 반영 된다.) |
nothing=rollback (DB에 반영 안된다.) |
------------------------------------------------------------------------------------------ |
transaction이란? |
sql login후부터 logout까지 발생하는 모든 dml =>1개의 트랜잭션이다. |
|
------------------------------------------------------------------------------------------ |
rollback이란? |
지금까지 했던 명령을 전부 되돌릴 수 있다. |
잘못 입력한 것에 대해서 취소할 수 있다. |
|
* 취소하기. |
|
ex) |
|
insert into dept(deptno,dname,loc) |
values(90,'연구','서울'); |
|
|
rollback만 치면 로그인후 지금까지 것들 rollback 시킨다. |
|
1T ==> LOGIN ==>LOGOUT |
|
TCL을 만나면 현재 트랜잭션을 종료 |
다음번 첫 SQL문을 만나면 새로운 트랜잭션이 시작 |
|
------------------------------------------------------------------------------------------ |
commit? |
DB에 보내 확정하는 것 |
|
cmd하나에서 수정한후 그냥 내비두면 다른 곳에는 바뀌지 않는다 |
commit;이라는 명령어를 써야 다른 곳에도 똑같이 보인다. |
|
|
------------------------------------------------------------------------------------------ |
|
database의 중요한 성질 |
|
'무결성' autorollback&autocommit |
|
|
명령어를 db에 보내다가 끊김. ->비정상종료->autorollback이 된다 ->지금까지한것 전부취소됨.-> commit을 항시 해주어야 한다. |
|
완벽한 명령어를 보내야 완료된다. |
|
만약 쓰는 중에 exit를 누르고 나가게 되면 autocommit이 된다. 무결성원칙에의해 완료되었다는것을 보낸것임. |
|
------------------------------------------------------------------------------------------ |
부분롤백? |
명령어를 입력하고 있는데 중간에 명령어 오류가 있다면 전부 ROLLBACK하고 다시 해야만 한다.DB에 보내버리면 |
책임은 개발자가 저야하기 때문에 신중해야만 한다. |
|
그러한 것을 막기 위해 SAVEPOINT를 중간중간에 세워 놓으면 부분 롤백이 가능해서 |
오류난 부분만 뜯어 고칠 수 있다. |
|
사용법 |
SAVEPOINT 지정어; |
ex) |
insert into dept |
values(1,'a','b'); |
1 개의 행이 만들어졌습니다. |
|
|
SQL> savepoint a1; |
|
저장점이 생성되었습니다. |
|
|
insert into dept |
values (3,'c','d'); |
|
1 개의 행이 만들어졌습니다. |
|
savepoint c1; |
|
부분 롤백 |
rollback to a1 해주면 |
a1 이후의 명령어는 전부 취소되고 a1이전의 값은 보존된다. <-SAVEPOINT는 ANSI표준 명령이 아니다! |
COMMIT과 ROLLBAKC은 ANSI 표준 명령이다 ! |
|
|
|
*한번 취소하면 다시 되돌아갈 수 없다. |