[SQLD] 데이터베이스 트랜잭션 (Transaction)

yjkim97·2023년 8월 28일

자격증

목록 보기
13/24
post-thumbnail

데이터베이스 트랜잭션

1) ⭐️⭐️ 트랜잭션 4가지 특성

특성영문설명
원자성atomicity트랜잭션에 정의된 연산은 모두 실행되던지 or 모두 실행되지 않던지
(All or Nothing)
일관성consistency트랜잭션 실행 전 데이터베이스 데이터에 잘못된 것이 없다면,
트랜잭션 실행 후에도 잘못된 데이터가 없어야한다.
고립성 (격리성)isolation트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
지속성durability트랜잭션이 성공적으로 수행되면 갱신된 데이터는 영구적으로 저장된다.

2) ⭐️ 고립성(isolation)이 낮은 경우 발생되는 문제점

  1. Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않는 데이터를 읽는 것
  2. Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정/삭제하여 두 쿼리의 결과가 다르게 제공되는 현상
  3. Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 추가하여 첫번째 쿼리 결과에 없던 레코드가 두번째 쿼리에서 제동되는 현상

Oracle vs SQLServer에서의 트랜잭션
Oracle에서는 DDL 수행시 자동 Commit 된다. (SQLServer는 자동 X)



SQL문

1) 트랜잭션 생성, 커밋, 롤백

begin transaction

  • begin tran도 가능
  • 새로운 트랜잭션을 생성한다.

commit

  • commit transaction도 가능
  • 현재 트랜잭션을 적용하고 종료한다.

rollback

  • rollback transaction도 가능
  • 최초의 begin transaction 시점까지 모두 롤백하고 종료한다.

2) 트랜잭션 저장점(SAVEPOINT)

save transaction 이름

  • 저장점을 정의하면 롤백할 때 트랜잭션에 포함된 전체작업을 롤백하는 것이 아니라
  • 현 시점에서 특정 저장점까지만 일부 롤백할 수 있다.
-- [Oracle]
-- 트랜잭션 시작
begin transaction;

-- sp1 저장점 설정
savepoint sp1;
update ...;

-- sp2 저장점 설정
savepoint sp2;
delete ...;

-- sp2 저장점 롤백 (delete 롤백됨)
rollback to sp2;

-- 커밋 (트랜잭션 종료)
commit;






-- [SQL Server]
-- 트랜잭션 시작
begin transaction;

-- sp1 저장점 설정
save transaction sp1;
update ...;

-- sp2 저장점 설정
save transaction sp2;
delete ...;

-- sp2 저장점 롤백 (delete 롤백됨)
rollback transaction sp2;

-- 커밋 (트랜잭션 종료)
commit;
profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글