존재이유
SQLite는 모든 변경 사항과 쿼리가 원자성(Atomic), 일관성(consistent), 격리(isolation) 및 내구성(durable) 등 ACID를 제공하는 Transaction DB이다
이것들을 유지하기 위해 DATA가 DB에 저장되는 시점을 수동으로 조정해야함
주로 데이터를 읽고 쓰는 과정에서 여러 사용자가 동시에 데이터를 읽고 쓰게 되면 데이터를 입력하는 시점에 데드락이나 참조값이 변화하여 데이터 값이 의도한 상태로 저장되지 않는 상황이 있음
-> Transaction 문으로 해결
BEGIN부터 시작한 명령 처리가 성공하면 DB에 저장(COMMIT), 실패하면 저장을 취소(ROLLBACK) 하도록 작업을 하나의 단위로 지정할 수 있음
BEGIN;
DELETE FROM zoo
WHERE eat = 'omnivore';
COMMIT;
COMMIT
: 저장 BEGIN
으로 시작 COMMIT
을 통해 트랜잭션이 시작된 이후 수행된 모든 SQL 연상이 DB 파일에 추가BEGIN;
DELETE FROM zoo
WHERE weight < 100;
ROLLBACK;
ROLLBACK
: 취소 ROLLBACK
은 트랜잭션 시작 이후로 수행된 모든 연산을 취소함BEGIN
, COMMIT/ROLLBACK
사용하지 않아도 내부적으로 모든 SQL문을 하나의 트랜잭션 내에서 수행되도록 함