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;