SQLite 트랜잭션
트랜잭션은 데이터베이스에서 수행되는 작업 단위입니다. 트랜잭션은 논리적 순서로 완료되는 작업 단위 또는 순서입니다. 이는 사용자가 수동으로 완료하거나 일부 데이터베이스 프로그램에 의해 자동으로 완료될 수 있습니다.
트랜잭션은 데이터베이스를 변경하는 하나 이상의 확장을 의미합니다. 예를 들어, 레코드를 생성하거나, 레코드를 업데이트하거나, 테이블에서 레코드를 삭제하는 경우 해당 테이블에서 트랜잭션을 수행하는 것입니다. 데이터 무결성을 보장하고 데이터베이스 오류를 처리하려면 트랜잭션을 제어하는 것이 중요합니다.
실제로 많은 SQLite 쿼리를 하나의 그룹으로 결합하고 트랜잭션의 일부로 모두 함께 실행할 수 있습니다.
트랜잭션 속성
트랜잭션에는 다음과 같은 네 가지 표준 속성이 있습니다. 일반적으로 약어를 기반으로 하는 ACID입니다.
원자성 ): 작업 단위 내의 모든 작업이 성공적으로 완료됩니다. 그렇지 않으면 트랜잭션이 실패 시 종료되고 이전 작업이 이전 상태로 롤백됩니다.
일관성: 성공적으로 커밋된 트랜잭션에서 데이터베이스 상태가 올바르게 변경되는지 확인합니다.
격리: 거래 운영을 독립적이고 투명하게 만듭니다.
내구성: 시스템 오류가 발생해도 커밋된 트랜잭션의 결과 또는 효과가 지속되도록 보장합니다.
트랜잭션 제어
다음 명령을 사용하여 트랜잭션을 제어합니다.
BEGIN TRANSACTION: 시작 거래 처리.
COMMIT: 변경 사항을 저장하거나 END TRANSACTION 명령을 사용할 수 있습니다.
ROLLBACK: 변경 사항을 롤백합니다.
트랜잭션 제어 명령은 DML 명령 INSERT, UPDATE 및 DELETE에만 사용됩니다. 이러한 작업은 데이터베이스에서 자동으로 커밋되므로 테이블을 생성하거나 테이블을 삭제할 때 사용할 수 없습니다.
BEGIN TRANSACTION 명령
BEGIN TRANSACTION 명령 또는 간단한 BEGIN 명령을 사용하여 트랜잭션을 시작할 수 있습니다. 이러한 트랜잭션은 일반적으로 다음 COMMIT 또는 ROLLBACK 명령이 발생할 때까지 계속됩니다. 그러나 데이터베이스가 닫히거나 오류가 발생하면 트랜잭션도 롤백됩니다. 다음은 트랜잭션을 시작하는 간단한 구문입니다.
BEGIN; or BEGIN TRANSACTION;
COMMIT 명령
COMMIT 명령은 트랜잭션에서 호출한 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령입니다.
COMMIT 명령은 마지막 COMMIT 또는 ROLLBACK 명령 이후의 모든 트랜잭션을 데이터베이스에 저장합니다.
COMMIT 명령의 구문은 다음과 같습니다.
COMMIT; or END TRANSACTION;
ROLLBACK 명령
ROLLBACK 명령은 아직 저장되지 않은 트랜잭션을 실행 취소하는 데 사용되는 트랜잭션 명령입니다. 데이터 베이스.
ROLLBACK 명령은 마지막 COMMIT 또는 ROLLBACK 명령이 실행된 이후 트랜잭션을 실행 취소하는 데에만 사용할 수 있습니다.
ROLLBACK 명령의 구문은 다음과 같습니다.
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
자, 트랜잭션을 시작하고 시작 연령 = 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