SQLite-트랜잭션

트랜잭션은 데이터베이스에 대해 수행되는 작업 단위입니다. 트랜잭션은 사용자가 수동으로 수행하거나 일종의 데이터베이스 프로그램에 의해 자동으로 수행되는 논리적 순서로 수행되는 작업 단위 또는 시퀀스입니다.

트랜잭션은 데이터베이스에 대한 하나 이상의 변경 사항을 전파하는 것입니다. 예를 들어 테이블에서 레코드를 생성, 업데이트 또는 삭제하는 경우 테이블에서 트랜잭션을 수행하는 것입니다. 데이터 무결성을 보장하고 데이터베이스 오류를 처리하기 위해 트랜잭션을 제어하는 ​​것이 중요합니다.

실제로 많은 SQLite 쿼리를 그룹으로 묶고 트랜잭션의 일부로 모두 함께 실행합니다.

거래의 속성

트랜잭션에는 일반적으로 약어 ACID로 참조되는 다음 네 가지 표준 속성이 있습니다.

  • Atomicity− 작업 단위 내의 모든 작업이 성공적으로 완료되었는지 확인합니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 상태로 롤백됩니다.

  • Consistency − 성공적으로 커밋 된 트랜잭션에서 데이터베이스가 상태를 올바르게 변경하는지 확인합니다.

  • Isolation − 트랜잭션이 서로 독립적이고 투명하게 작동 할 수 있습니다.

  • Durability − 시스템 장애시 커밋 된 트랜잭션의 결과 또는 효과가 지속되도록합니다.

거래 통제

다음은 트랜잭션을 제어하는 ​​데 사용되는 다음 명령입니다.

  • BEGIN TRANSACTION − 거래 시작.

  • COMMIT − 변경 사항을 저장하려면 또는 END TRANSACTION 명령.

  • ROLLBACK − 변경 사항을 롤백합니다.

트랜잭션 제어 명령은 DML 명령 INSERT, UPDATE 및 DELETE에만 사용됩니다. 이러한 작업은 데이터베이스에서 자동으로 커밋되기 때문에 테이블을 생성하거나 삭제하는 동안에는 사용할 수 없습니다.

BEGIN TRANSACTION 명령

트랜잭션은 BEGIN TRANSACTION 또는 단순히 BEGIN 명령을 사용하여 시작할 수 있습니다. 이러한 트랜잭션은 일반적으로 다음 COMMIT 또는 ROLLBACK 명령이 발생할 때까지 지속됩니다. 그러나 데이터베이스가 닫히거나 오류가 발생하면 트랜잭션도 ROLLBACK됩니다. 다음은 트랜잭션을 시작하는 간단한 구문입니다.

BEGIN;
or 
BEGIN TRANSACTION;

COMMIT 명령

COMMIT 명령은 트랜잭션에 의해 호출 된 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다.

COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후 모든 트랜잭션을 데이터베이스에 저장합니다.

다음은 COMMIT 명령 구문입니다.

COMMIT;
or
END TRANSACTION;

ROLLBACK 명령

ROLLBACK 명령은 데이터베이스에 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다.

ROLLBACK 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 실행 된 이후 트랜잭션을 실행 취소하는 데만 사용할 수 있습니다.

다음은 ROLLBACK 명령 구문입니다.

ROLLBACK;

Example

다음 레코드가있는 COMPANY 테이블을 고려하십시오 .

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

이제 트랜잭션을 시작하고 age = 25 인 테이블에서 레코드를 삭제합니다. 그런 다음 ROLLBACK 명령을 사용하여 모든 변경 사항을 취소합니다.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

이제 COMPANY 테이블을 확인하면 다음과 같은 레코드가 있습니다.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

다른 트랜잭션을 시작하고 age = 25 인 테이블에서 레코드를 삭제하고 마지막으로 COMMIT 명령을 사용하여 모든 변경 사항을 커밋합니다.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

이제 COMPANY 테이블을 확인하면 여전히 다음 레코드가 있습니다.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0