English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
트랜잭션은 데이터베이스에서 수행되는 작업 단위입니다. 트랜잭션은 논리적 순서로 완료되거나 작업 순서로 완료되며, 사용자가 수동으로 완료하거나 어떤 데이터베이스 프로그램이 자동으로 완료할 수 있습니다.
트랜잭션은 하나나 여러 개의 변경 사항을 데이터베이스로 전파하는 것입니다. 예를 들어, 테이블에 레코드를 생성하거나 업데이트하거나 제거하려면 테이블에서 트랜잭션을 수행합니다. 데이터의 일관성을 유지하고 데이터베이스 오류를 처리하기 위해 트랜잭션을 제어하는 것이 중요합니다.
실제로는 여러 SQLite 쿼리를 그룹으로 만들어 트랜잭션의 일부로 함께 실행합니다.
트랜잭션은 다음 네 가지 표준 속성을 가지고 있으며, 일반적으로 ACID 약자로 대표됩니다.
원자성(Atomicity):작업单位的 모든 작업이 성공적으로 완료되도록 하십시오. 그렇지 않으면, 문제가 발생할 때 트랜잭션이 종료되고, 이전 작업은 이전 상태로 되돌아갑니다.
一致性(Consistency):성공적으로 제출된 트랜잭션에 대해 데이터베이스가 정확하게 상태를 변경하도록 합니다.
隔離性(Isolation):트랜잭션 작업이 서로 독립적이고 투명하게 되도록 합니다.
지속성(Durability):시스템이 고장 나거나 다른 문제가 발생할 때도 이미 제출된 트랜잭션의 결과나 효과가 계속 유지되도록 합니다.
트랜잭션을 제어하는 다음 명령어가 있습니다:
BEGIN TRANSACTION − 트랜잭션을 시작합니다.
COMMIT− 변경 사항을 저장하려면 다음과 같이도 사용할 수 있습니다END TRANSACTION명령어.
ROLLBACK − 변경 사항을 취소합니다.
트랜잭션 제어 명령어는 INSERT, UPDATE, DELETE와 같은 DML 명령어와 함께 사용됩니다. 이 명령어들은 테이블을 생성하거나 테이블을 제거할 때 사용할 수 없습니다. 이러한 작업은 데이터베이스에서 자동으로 COMMIT됩니다.
BEGIN TRANSACTION을 사용하거나 단순히 BEGIN 명령어를 사용하여 트랜잭션을 시작할 수 있습니다. 이러한 트랜잭션은 일반적으로 다음 COMMIT 또는 ROLLBACK 명령어에 도달할 때까지 지속됩니다. 그러나 데이터베이스가 닫히거나 오류가 발생하면 트랜잭션도 취소됩니다. 트랜잭션을 시작하는 간단한 문법은 다음과 같습니다.
BEGIN; 또는 BEGIN TRANSACTION;
COMMIT 명령어는 트랜잭션 호출의 변경 사항을 데이터베이스에 저장하는 데 사용되는 트랜잭션 명령어입니다.
COMMIT 또는 ROLLBACK 명령어를 발행한 이후로, COMMIT 명령어는 모든 트랜잭션을 데이터베이스에 저장합니다.
COMMIT 명령어의 문법은 다음과 같습니다.
COMMIT; 또는 END TRANSACTION;
ROLLBACK 명령어는 데이터베이스에 저장되지 않은 트랜잭션을 취소하는 데 사용되는 트랜잭션 명령어입니다.
COMMIT 또는 ROLLBACK 명령어를 발행한 이후로, ROLLBACK 명령어는 트랜잭션을 취소하는 데 사용될 수 있습니다.
ROLLBACK 명령어의 문법은 다음과 같습니다.
ROLLBACK;
온라인 예제
의 기록이 포함된 COMPANY 테이블.
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 폴 32 캘리포니아 20000.0 2 Allen 25 텍사스 15000.0 3 템디 23 노르웨이 20000.0 4 Mark 25 Rich-Mond 65000.0 5 대비드 27 텍사스 85000.0 6 김 22 서드-할 45000.0 7 제임스 24 휴스턴 10000.0
지금, 트랜잭션을 시작하고 age = 25의 테이블에서 기록을 삭제하고, 모든 변경 사항을 취소하기 위해 ROLLBACK 명령어를 사용합니다.
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> ROLLBACK;
지금, COMPANY 테이블을 확인하면 여전히 다음과 같은 기록이 있습니다-
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 폴 32 캘리포니아 20000.0 2 Allen 25 텍사스 15000.0 3 템디 23 노르웨이 20000.0 4 Mark 25 Rich-Mond 65000.0 5 대비드 27 텍사스 85000.0 6 김 22 서드-할 45000.0 7 제임스 24 휴스턴 10000.0
또 다른 트랜잭션을 시작하고 AGE = 25의 테이블에서 기록을 삭제하고, 모든 변경 사항을 제출하기 위해 COMMIT 명령어를 사용합니다.
sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> COMMIT;
COMPANY 테이블이 여전히 다음과 같은 기록을 가지고 있는지 지금 확인하면-
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 폴 32 캘리포니아 20000.0 3 템디 23 노르웨이 20000.0 5 대비드 27 텍사스 85000.0 6 김 22 서드-할 45000.0 7 제임스 24 휴스턴 10000.0