Transaction
)질의어
SELETE, UPDATE, DELETE, …
하나의 트랜잭션은 COMMIT 되거나 ROLLBACK 된다
트랜잭션은 하나의 논리적인 작업의 단위이기 때문에, 여러 개의 작업을 하나의 논리적인 단위로 묶어서 반영과 복구를 조정할 수 있기 위해 사용한다.
따라서, 데이터의 부정합이 일어났을 경우 롤백을 하여 데이터의 부정합을 방지할 수 있다
두 가지의 수정을 하는 하나의 트랜잭션이다.
start transaction; # 시작
-- 쿼리문 1 : 수정 전 상태 확인 ( select )
select *
from dal.thumbs;
-- 쿼리문 2 : 수정 ( Delete )
Delete from dal.thumbs
where thumb_id = 1;
savepoint name1; #"name1” 이라는 이름의 savepoint 설정
-- 쿼리문 2 : 수정2 ( Delete )
Delete from dal.thumbs
where thumb_id = 2;
-- 쿼리문 3 : 수정 후 상태 확인 ( select )
select *
from dal.thumbs;
여기서 트랜잭션을 완료하려면 커밋을 한다.
commit; # 저장, 1개의 트랜젝션 끝
하지만, 만약 문제가 생긴다면 ROLLBACK
연산을 사용한다
-- 마지막 커밋으로 돌아간다.
rollback;
-- savepoint 위치까지만 남기고, 그 아래 문장들만 ROLLBACK 한다
rollback ro name1
DDL문(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 transaction의 rollback 대상이 아니다.
오백번 강조해도 지나치지 않을 ACID