T-sql-transactions

提供:Dev Guides
移動先:案内検索

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>