HSQLDB-트랜잭션
ㅏ Transaction하나의 단일 작업 단위로 수행되고 고려되는 순차적 인 데이터베이스 조작 작업 그룹입니다. 즉, 모든 작업이 성공적으로 실행되면 전체 트랜잭션이 완료됩니다. 트랜잭션 내의 작업이 실패하면 전체 트랜잭션이 실패합니다.
거래의 속성
기본적으로 트랜잭션은 4 가지 표준 속성을 지원합니다. ACID 속성이라고 할 수 있습니다.
Atomicity − 트랜잭션의 모든 작업이 성공적으로 실행됩니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 위치로 롤백됩니다.
Consistency − 데이터베이스는 성공적으로 커밋 된 트랜잭션에서 상태를 올바르게 변경합니다.
Isolation − 트랜잭션이 독립적으로 작동하고 서로에게 투명하게 작동 할 수 있습니다.
Durability − 커밋 된 트랜잭션의 결과 또는 효과는 시스템 장애시에도 지속됩니다.
커밋, 롤백 및 저장 점
이러한 키워드는 주로 HSQLDB 트랜잭션에 사용됩니다.
Commit− 항상 COMMIT 명령을 실행하여 성공적인 트랜잭션을 완료해야합니다.
Rollback − 트랜잭션에서 오류가 발생하면 ROLLBACK 명령을 실행하여 트랜잭션에서 참조 된 모든 테이블을 이전 상태로 되돌려 야합니다.
Savepoint − 롤백 할 트랜잭션 그룹 내에서 포인트를 생성합니다.
예
다음 예에서는 커밋, 롤백 및 저장 점과 함께 트랜잭션 개념을 설명합니다. ID, 이름, 나이, 주소 및 급여 열이있는 테이블 Customers를 고려해 보겠습니다.
신분증 | 이름 | 나이 | 주소 | 봉급 |
---|---|---|---|---|
1 | 라 메쉬 | 32 | 아마다 바드 | 2000.00 |
2 | 카룬 | 25 | 델리 | 1500.00 |
삼 | Kaushik | 23 | 코타 | 2000.00 |
4 | 차이 타냐 | 25 | 뭄바이 | 6500.00 |
5 | Harish | 27 | 보팔 | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | 무랄리 | 24 | 인도 르 | 10000.00 |
다음 명령을 사용하여 위 데이터 라인을 따라 고객 테이블을 만듭니다.
CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);
COMMIT의 예
다음 쿼리는 age = 25 인 테이블에서 행을 삭제하고 COMMIT 명령을 사용하여 데이터베이스에 이러한 변경 사항을 적용합니다.
DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;
위 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.
2 rows effected
위 명령을 성공적으로 수행 한 후 아래 주어진 명령을 실행하여 고객 테이블의 레코드를 확인합니다.
Select * from Customer;
위 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 3 | kaushik | 23 | Kota | 2000 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
롤백의 예
동일한 고객 테이블을 입력으로 고려해 보겠습니다.
신분증 | 이름 | 나이 | 주소 | 봉급 |
---|---|---|---|---|
1 | 라 메쉬 | 32 | 아마다 바드 | 2000.00 |
2 | 카룬 | 25 | 델리 | 1500.00 |
삼 | Kaushik | 23 | 코타 | 2000.00 |
4 | 차이 타냐 | 25 | 뭄바이 | 6500.00 |
5 | Harish | 27 | 보팔 | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | 무랄리 | 24 | 인도 르 | 10000.00 |
다음은 age = 25 인 테이블에서 레코드를 삭제 한 다음 데이터베이스의 변경 사항을 ROLLBACK하여 롤백 기능에 대해 설명하는 예제 쿼리입니다.
DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;
위의 두 쿼리를 성공적으로 실행 한 후 다음 명령을 사용하여 Customer 테이블의 레코드 데이터를 볼 수 있습니다.
Select * from Customer;
위의 명령을 실행하면 다음과 같은 출력이 표시됩니다.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
삭제 쿼리는 나이가 25 세인 고객의 레코드 데이터를 삭제합니다. Rollback 명령은 Customer 테이블에서 이러한 변경 사항을 롤백합니다.
세이브 포인트의 예
세이브 포인트는 전체 트랜잭션을 롤백하지 않고 트랜잭션을 특정 지점으로 롤백 할 수있는 트랜잭션의 지점입니다.
동일한 고객 테이블을 입력으로 고려해 보겠습니다.
신분증 | 이름 | 나이 | 주소 | 봉급 |
---|---|---|---|---|
1 | 라 메쉬 | 32 | 아마다 바드 | 2000.00 |
2 | 카룬 | 25 | 델리 | 1500.00 |
삼 | Kaushik | 23 | 코타 | 2000.00 |
4 | 차이 타냐 | 25 | 뭄바이 | 6500.00 |
5 | Harish | 27 | 보팔 | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | 무랄리 | 24 | 인도 르 | 10000.00 |
이 예에서는 Customers 테이블에서 세 가지 다른 레코드를 삭제할 계획을 고려해 보겠습니다. 각 삭제 전에 Savepoint를 생성하여 언제든지 원하는 Savepoint로 롤백하여 적절한 데이터를 원래 상태로 되돌릴 수 있습니다.
다음은 일련의 작업입니다.
SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;
이제 세 개의 세이브 포인트를 만들고 세 개의 레코드를 삭제했습니다. 이 상황에서 Id 2와 3이있는 레코드를 롤백하려면 다음 롤백 명령을 사용하십시오.
ROLLBACK TO SP2;
SP2로 롤백 한 이후 첫 번째 삭제 만 발생했습니다. 다음 쿼리를 사용하여 고객의 모든 레코드를 표시합니다.
Select * from Customer;
위 쿼리를 실행하면 다음과 같은 출력이 표시됩니다.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
저장 점 해제
RELEASE 명령을 사용하여 Savepoint를 해제 할 수 있습니다. 다음은 일반 구문입니다.
RELEASE SAVEPOINT SAVEPOINT_NAME;