Hsqldb-transactions
HSQLDB-トランザクション
- トランザクション*は、データベース操作操作の順次グループであり、実行され、1つの作業単位と見なされます。 つまり、すべての操作が正常に実行されると、トランザクション全体が完了します。 トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。
トランザクションのプロパティ
基本的に、トランザクションは4つの標準プロパティをサポートします。 それらはACIDプロパティと呼ばれます。
一貫性-データベースは、正常にコミットされたトランザクションの状態を適切に変更します。
分離-トランザクションが互いに独立して動作し、相互に透過的になるようにします。
耐久性-コミットされたトランザクションの結果または効果は、システム障害の場合に持続します。
コミット、ロールバック、およびセーブポイント
これらのキーワードは、主にHSQLDBトランザクションに使用されます。
コミット-COMMITコマンドを実行して、常に成功したトランザクションを完了する必要があります。
ロールバック-トランザクションで障害が発生した場合、ROLLBACKコマンドを実行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。
例
次の例では、トランザクションの概念を、コミット、ロールバック、およびセーブポイントとともに説明します。 id、name、age、address、salaryの列を持つテーブルCustomersを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
次のコマンドを使用して、上記のデータの行に沿って顧客テーブルを作成します。
COMMITの例
次のクエリは、年齢= 25のテーブルから行を削除し、COMMITコマンドを使用してこれらの変更をデータベースに適用します。
上記のクエリを実行すると、次の出力が表示されます。
上記のコマンドが正常に実行されたら、以下のコマンドを実行して顧客テーブルのレコードを確認します。
上記のクエリを実行すると、次の出力が表示されます。
ロールバックの例
入力と同じCustomerテーブルを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
以下に、年齢= 25のテーブルからレコードを削除し、データベースの変更をROLLBACKすることにより、ロールバック機能について説明するクエリの例を示します。
上記の2つのクエリが正常に実行された後、次のコマンドを使用してCustomerテーブルのレコードデータを表示できます。
上記のコマンドを実行すると、次の出力が表示されます。
削除クエリは、年齢= 25の顧客のレコードデータを削除します。 Rollbackコマンドは、Customerテーブルのこれらの変更をロールバックします。
セーブポイントの例
セーブポイントは、トランザクション全体をロールバックせずに特定のポイントにトランザクションをロールバックできる場合のトランザクションのポイントです。
入力と同じCustomerテーブルを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
この例では、Customersテーブルから3つの異なるレコードを削除することを考えてみましょう。 各削除の前にセーブポイントを作成して、いつでも任意のセーブポイントにロールバックして、適切なデータを元の状態に戻すことができるようにします。
これが一連の操作です。
これで、3つのセーブポイントを作成し、3つのレコードを削除しました。 この状況で、Id 2および3を持つレコードをロールバックする場合は、次のRollbackコマンドを使用します。
SP2にロールバックしてから最初の削除のみが行われたことに注意してください。 次のクエリを使用して、顧客のすべてのレコードを表示します。
上記のクエリを実行すると、次の出力が表示されます。
セーブポイントを解放
RELEASEコマンドを使用してセーブポイントを解放できます。 以下は一般的な構文です。