T-sql-transactions
T-SQL-トランザクション
- トランザクション*は、データベースに対して実行される作業単位です。 トランザクションとは、ユーザーが手動で実行する場合でも、何らかのデータベースプログラムで自動的に実行する場合でも、論理的な順序で実行される作業の単位またはシーケンスです。
トランザクションは、データベースに対する1つ以上の変更の伝播です。 たとえば、レコードを作成する場合、レコードを更新する場合、またはテーブルからレコードを削除する場合、テーブルでトランザクションを実行します。 データの整合性を確保し、データベースエラーを処理するには、トランザクションを制御することが重要です。
実際には、多くのSQLクエリを1つのグループにまとめ、トランザクションの一部としてそれらすべてをまとめて実行します。
トランザクションのプロパティ
トランザクションには、通常、頭字語ACIDで参照される次の4つの標準プロパティがあります-
- Atomicity -ワークユニット内のすべての操作が正常に完了することを保証します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。
- 一貫性-トランザクションが正常にコミットされると、データベースの状態が適切に変更されるようにします。
- 分離-トランザクションが相互に独立して透過的に動作できるようにします。
- 耐久性-システム障害の場合に、コミットされたトランザクションの結果または効果が持続することを保証します。
トランザクション制御
トランザクションを制御するために使用される次のコマンドがあります-
- COMMIT -変更を保存します。
- ROLLBACK -変更をロールバックします。
- SAVEPOINT -ROLLBACKするトランザクションのグループ内にポイントを作成します。
- SET TRANSACTION -トランザクションに名前を付けます。
トランザクション制御コマンドは、DMLコマンドのINSERT、UPDATE、およびDELETEでのみ使用されます。 これらの操作はデータベースで自動的にコミットされるため、テーブルの作成中または削除中は使用できません。
MS SQL Serverでトランザクション制御コマンドを使用するには、「begin tran」でトランザクションを開始するか、トランザクションコマンドを開始する必要があります。そうしないと、これらのコマンドは機能しません。
COMMITコマンド
COMMITコマンドは、トランザクションによって呼び出された変更をデータベースに保存するために使用されるトランザクションコマンドです。 このコマンドは、最後のCOMMITまたはROLLBACKコマンド以降のすべてのトランザクションをデータベースに保存します。
構文
COMMITコマンドの構文は次のとおりです。
COMMIT;
例
次のレコードを持つCUSTOMERSテーブルを検討してください。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
次のコマンド例は、年齢= 25のテーブルからレコードを削除し、データベースの変更をコミットします。
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT
その結果、テーブルから2つの行が削除され、SELECTステートメントは次の出力を生成します。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
ROLLBACKコマンド
ROLLBACKコマンドは、データベースにまだ保存されていないトランザクションを取り消すために使用されるトランザクションコマンドです。 このコマンドは、最後のCOMMITまたはROLLBACKコマンドが発行されてからトランザクションを元に戻すためにのみ使用できます。
構文
ROLLBACKコマンドの構文は次のとおりです。
ROLLBACK
例
次のレコードを持つCUSTOMERSテーブルを検討してください。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
次のコマンド例は、年齢= 25のテーブルからレコードを削除し、データベースの変更をロールバックします。
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK
その結果、削除操作はテーブルに影響せず、SELECTステートメントは次の結果を生成します。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SAVEPOINTコマンド
SAVEPOINTは、トランザクション全体をロールバックせずにトランザクションを特定のポイントにロールバックできるトランザクションのポイントです。
構文
SAVEPOINTコマンドの構文は次のとおりです。
SAVE TRANSACTION SAVEPOINT_NAME
このコマンドは、トランザクションステートメント間のSAVEPOINTの作成でのみ機能します。 ROLLBACKコマンドは、トランザクションのグループを元に戻すために使用されます。
以下は、SAVEPOINTにロールバックするための構文です。
ROLLBACK TO SAVEPOINT_NAME
次の例では、CUSTOMERSテーブルから3つの異なるレコードを削除します。 削除するたびにSAVEPOINTを作成する必要があります。これにより、いつでも任意のSAVEPOINTにロールバックして、適切なデータを元の状態に戻すことができます。
例
次のレコードを持つCUSTOMERS表を考慮してください-
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
以下は、一連の操作です-
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
3つの削除が行われましたが、考えを変え、SP2として識別したSAVEPOINTにロールバックすることにしました。 SP2は最初の削除後に作成されたため、最後の2つの削除は元に戻されます-
ROLLBACK Transaction SP2
Rollback complete.
SP2にロールバックしてから最初の削除のみが行われたことに注意してください。
SELECT * FROM CUSTOMERS
6行が選択されました。
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SET TRANSACTIONコマンド
SET TRANSACTIONコマンドを使用して、データベーストランザクションを開始できます。 このコマンドは、後続のトランザクションの特性を指定するために使用されます。
構文
以下は、SET TRANSACTIONの構文です。
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>