T-SQL-トランザクション

A transactionデータベースに対して実行される作業単位です。トランザクションは、ユーザーが手動で行う場合でも、ある種のデータベースプログラムによって自動的に行う場合でも、論理的な順序で実行される作業の単位またはシーケンスです。

トランザクションとは、データベースへの1つ以上の変更の伝播です。たとえば、レコードを作成したり、レコードを更新したり、テーブルからレコードを削除したりする場合は、テーブルでトランザクションを実行しています。データの整合性を確保し、データベースエラーを処理するには、トランザクションを制御することが重要です。

実際には、多くのSQLクエリをグループにまとめ、トランザクションの一部としてそれらすべてを一緒に実行します。

トランザクションのプロパティ

トランザクションには次の4つの標準プロパティがあり、通常は頭字語ACID-と呼ばれます。

  • Atomicity−ワークユニット内のすべての操作が正常に完了したことを確認します。それ以外の場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。

  • Consistency −トランザクションが正常にコミットされると、データベースの状態が適切に変更されるようにします。

  • Isolation −トランザクションが互いに独立して透過的に動作できるようにします。

  • Durability −システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が持続することを保証します。

トランザクション制御

トランザクションを制御するために使用される次のコマンドがあります-

  • COMMIT −変更を保存します。

  • ROLLBACK −変更をロールバックします。

  • SAVEPOINT −ロールバックするトランザクションのグループ内にポイントを作成します。

  • 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

次のコマンド例では、age = 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

次のコマンド例では、age = 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

SETTRANSACTIONコマンド

SET TRANSACTIONコマンドを使用して、データベーストランザクションを開始できます。このコマンドは、後続のトランザクションの特性を指定するために使用されます。

構文

以下は、SETTRANSACTIONの構文です。

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>