[SQLite] Transaction

한결·2023년 4월 6일
0

WEB

목록 보기
18/63

Transaction

  • 존재이유

    • SQLite는 모든 변경 사항과 쿼리가 원자성(Atomic), 일관성(consistent), 격리(isolation) 및 내구성(durable) 등 ACID를 제공하는 Transaction DB이다

    • 이것들을 유지하기 위해 DATA가 DB에 저장되는 시점을 수동으로 조정해야함

    • 주로 데이터를 읽고 쓰는 과정에서 여러 사용자가 동시에 데이터를 읽고 쓰게 되면 데이터를 입력하는 시점에 데드락이나 참조값이 변화하여 데이터 값이 의도한 상태로 저장되지 않는 상황이 있음

    -> Transaction 문으로 해결
    BEGIN부터 시작한 명령 처리가 성공하면 DB에 저장(COMMIT), 실패하면 저장을 취소(ROLLBACK) 하도록 작업을 하나의 단위로 지정할 수 있음

SQLite Transaction 문

BEGIN;
  DELETE FROM zoo
  WHERE eat = 'omnivore';
COMMIT;
  • COMMIT : 저장
  1. 트랜잭션 구문은 BEGIN으로 시작
  2. 이후 실행하고자 하는 SQL 구문들을 추가
  3. COMMIT 을 통해 트랜잭션이 시작된 이후 수행된 모든 SQL 연상이 DB 파일에 추가
BEGIN;
  DELETE FROM zoo
  WHERE weight < 100;
ROLLBACK;
  • ROLLBACK : 취소
  • ROLLBACK은 트랜잭션 시작 이후로 수행된 모든 연산을 취소함

AUTOCOMMIT 모드

  • SQLite3는 AUTOCOMMIT 모드를 지원함
    -> 명시적으로 BEGIN, COMMIT/ROLLBACK 사용하지 않아도 내부적으로 모든 SQL문을 하나의 트랜잭션 내에서 수행되도록 함

0개의 댓글