logo

SQLトランザクション

SQL トランザクションは、1 つ以上の SQL 操作のシーケンスです (例:INSERT UPDATE DELETE) 単一の作業単位として実行されます。トランザクションは、すべての操作が成功するか、データの整合性を維持しながら何も適用されないことを保証します。

SQL トランザクションの主要なプロパティ: ACID

SQL トランザクションの整合性は、信頼性の高いデータベース トランザクションを保証する ACID プロパティによって管理されます。これら 4 つのプロパティが連携して、データベースの一貫性と信頼性が維持されることが保証されます。

  • 原子性: トランザクションの結果は、完全に成功する場合もあれば、完全に失敗する場合もあります。トランザクションの一部が失敗した場合は、トランザクション全体をロールバックする必要があります。
  • 一貫性: トランザクションは、データベースをある有効な状態から別の有効な状態に移動することによって整合性制限を維持します。
  • 分離: 同時トランザクションは相互に分離され、データの正確性が保証されます。
  • 耐久性: トランザクションがコミットされると、システム障害が発生した場合でも、その変更は有効のままになります。

SQL トランザクション制御コマンド

SQL トランザクション制御コマンドでは、 SQL 操作の実行により、データベース トランザクションの整合性と信頼性が保証されます。これらのコマンドは、データベースに加えられた変更の開始コミットとロールバックを管理するのに役立ちます。以下に、SQL の主要なトランザクション制御コマンドを、それぞれの構文と例とともに説明します。



1. トランザクション開始コマンド

BEGIN TRANSACTIONコマンドは、新しいトランザクションの開始をマークします。このコマンドに続くすべての SQL ステートメントは、次のトランザクションが実行されるまで同じトランザクションの一部になります。COMMIT または ROLLBACK に遭遇します。このコマンドはデータベースに変更を加えず、トランザクションを開始するだけです。

構文:

BEGIN TRANSACTION transaction_name ;

銀行振込シナリオを使用した SQL トランザクションの例

2 つの口座間の銀行振込の例を見てみましょう。この例では、単一のトランザクションで複数のクエリを使用する方法を示します。

BEGIN TRANSACTION;  

-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';

-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';

-- Commit the transaction if both operations succeed
COMMIT;

何らかの問題が発生した場合は、UPDATE使用できるクエリROLLBACKトランザクション中に行われたすべての変更を元に戻すには、次のようにします。

vlc ダウンロード youtube
ROLLBACK;

これにより、あるアカウントから別のアカウントにお金を追加せずに差し引くなど、システムが矛盾した状態に陥ることがなくなります。

BEGIN TRANSACTION TransferFunds;

2.COMMITコマンド

COMMITコマンドは、現在のトランザクション中に行われたすべての変更をデータベースに保存するために使用されます。トランザクションがコミットされると、変更は永続的に反映されます。 

構文:

COMMIT;

サンプルはこちらStudentこの例で操作を実行するために使用されるテーブル。このテーブルには、ID 名、年齢などの基本的な学生の詳細や、さまざまな方法を使用して操作されるその他の関連情報が含まれています。 トランザクション制御コマンド。

出力' title=学生テーブル

以下は、age = 20 のレコードをテーブルから削除し、データベース内の変更を COMMIT する例です。 

DELETE FROM Student WHERE AGE = 20;  
COMMIT;

出力

出力' loading='lazy' title=出力

3. ROLLBACKコマンド

ROLLBACKコマンドは、現在のトランザクションで行われたすべての変更を元に戻すために使用されます。エラーが発生した場合や、希望の変更が完了できない場合に使用されます。データベースは、変更前の状態に戻ります。 BEGIN TRANSACTION 処刑されました。

構文:

ROLLBACK;

age = 20 のレコードをテーブルから削除し、データベース内の変更をロールバックします。 この場合、 DELETE 操作は元に戻され、データベースへの変更は保存されません。

DELETE FROM Student WHERE AGE = 20;  
ROLLBACK;

出力:

出力' loading='lazy' title=出力

4. SAVEPOINTコマンド

SAVEPOINTを作成するために使用されます チェックポイント トランザクション内で。特定の状態にロールバックできますSAVEPOINTトランザクション全体をロールバックするのではなく。これにより、トランザクションの一部を元に戻すのではなく、元に戻すことができます。 トランザクション全体。

ループ 1 ~ 10 の bash

構文:

SAVEPOINT SAVEPOINT_NAME;

SAVEPOINT SP1;  
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted
SAVEPOINT SP2;
//Savepoint created.

出力:

出力' loading='lazy' title=出力

説明:

上記の例から、サンプル テーブル 1 年齢 = 20 のレコードをテーブルから削除し、セーブポイントを保持してデータベース内の変更をロールバックします。 ここで、SP1 は削除前に最初に作成される SAVEPOINT です。この例では、1 つの削除が行われています。 再度削除すると、SAVEPOINT SP2 が作成されます。 

5. セーブポイントへのロールバック

ROLLBACK TO SAVEPOINTコマンドを使用すると、トランザクションを特定のセーブポイントまでロールバックして、そのポイント以降に行われた変更を効果的に元に戻すことができます。

構文:

ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;

削除が行われました。気が変わって、削除前の SP1 として識別したセーブポイントにロールバックすることにしたと仮定します。 したがって、この場合、DELETE操作は取り消され、トランザクションは元の状態に戻ります。SP1セーブポイント。

ROLLBACK TO SP1;  
//Rollback completed

出力:

出力' loading='lazy' title=出力

6. RELEASE SAVEPOINT コマンド

このコマンドは、作成した SAVEPOINT を削除するために使用されます。 SAVEPOINT が解放されると、ROLLBACK は使用できなくなります。 最後の SAVEPOINT 以降に実行されたトランザクションを元に戻すコマンド。これはデータベース トランザクションを開始するために使用され、その後のトランザクションの特性を指定するために使用されます。 

構文:  

RELEASE SAVEPOINT SAVEPOINT_NAME;

セーブポイントを越えたらSP2がリリースされたため、以前にロールバックすることはできなくなりました。

RELEASE SAVEPOINT SP2; -- Release the second savepoint.

銀行業務でトランザクションを使用する理由

この場合、トランザクションがない場合、一方のアカウントからお金が引き落とされるが、もう一方のアカウントには追加されず、システムが不整合な状態になるというシナリオが発生する危険があります。トランザクションは、両方の操作が同時に成功または失敗することを保証することで、このような問題を確実に回避します。

SQLトランザクションの種類

トランザクションには、その性質と実行する特定の操作に基づいて、さまざまな種類があります。

  • トランザクションの読み取り : 通常、データの読み取りのみに使用されます。 SELECT クエリ。
  • トランザクションの書き込み : これらには、データベース内のデータを変更することが含まれます。 INSERT UPDATEまたはDELETE操作。
  • 分散トランザクション : これらのトランザクションは複数のデータベースにまたがり、データベース間の一貫性を確保します。
  • 暗黙的なトランザクション : 特定の操作のために SQL Server によって自動的に開始されます。
  • 明示的なトランザクション : ユーザーが次を使用してトランザクションを開始および終了する、手動で制御されるトランザクション。BEGIN TRANSACTION COMMITそしてROLLBACK

SQLトランザクションの監視と最適化

パフォーマンスを維持し、問題を防ぐには、次の手法を検討してください。

Base64 JavaScript デコード

1. モニターロック : ロック動作を追跡し、クエリを調整してロックの競合を最小限に抑えます。

2. トランザクション範囲の制限 : トランザクションの影響を受ける行またはレコードの数を制限して、処理を高速化します。

3. バッチ処理を使用する : 大量のデータを処理している場合は、システムに負荷がかかるのを避けるために、操作を小さなトランザクションまたはバッチに分割します。

おすすめのクイズ クイズの編集 5 つの質問

次のシナリオのうち、ACID の「分離」プロパティの違反を最もよく説明しているのはどれですか?

  • トランザクションにより、データベースが主キー制約に違反した状態になります。

  • B

    2 つのトランザクションが同時に実行され、同じデータの読み取りと書き込みが行われると、一貫性のない結果が発生します。

  • C

    ユーザーはレコードを正常に更新しましたが、システムのクラッシュにより変更が消去されました。

  • D

    トランザクションは途中で失敗し、その変更はすべて元に戻されます。

説明:

これは、あるトランザクションの中間状態が別のトランザクションに見える分離違反の典型的な例です。

銀行アプリケーションでは、資金移動には、ある口座からの借方記入と別の口座への入金が含まれます。両方の操作が完了するか、どちらも完了しないことを保証する ACID プロパティはどれですか?

  • 分離

  • B

    原子性

  • C

    耐久性

  • D

    一貫性

説明:

アトミック性により、トランザクション内のすべての操作が正常に完了することが保証されます。そうしないと、トランザクション全体がロールバックされます。

トランザクションが実行され、「COMMIT」が発行されます。停電発生直後。トランザクションによって行われた変更がシステムの再起動後も存在することを保証する ACID プロパティはどれですか?

  • 一貫性

  • B

    原子性

  • C

    耐久性

  • D

    分離

説明:

耐久性とは、トランザクションが一度コミットされると、停電やシステムクラッシュが発生した場合でもトランザクションが維持されることを保証する特性です。

トランザクションにおける「SAVEPOINT」コマンドの主な目的は何ですか?

  • トランザクションの一部をコミットします。

  • B

    後でロールバックできるトランザクション内のポイントをマークすること。

  • C

    トランザクションの状態を永続的に保存します。

  • D

    トランザクションを終了し、すべての変更を永続的なものにします。

    抽象クラスはコンストラクターを持つことができますか
説明:

「SAVEPOINT」を使用すると、トランザクション内で部分的なロールバックが可能になります。

次のトランザクションを考えてみましょう: 'START TRANSACTION;入れる ...;セーブポイントA;アップデート ...;セーブポイント B;消去 ...;セーブポイント A にロールバックします;' 「ROLLBACK」コマンド後のトランザクションの状態はどうなっていますか?

  • トランザクション全体がロールバックされます。

  • B

    「DELETE」のみが元に戻されます。

  • C

    最新でないセーブポイントにはロールバックできないため、エラーが発生します。

  • D

    「INSERT」は保存されますが、「UPDATE」と「DELETE」は元に戻されます。

説明:

「SAVEPOINT A」にロールバックすると、そのセーブポイント以降に行われたすべての変更 (「UPDATE」と「DELETE」) が元に戻されます。

SQLトランザクションクイズは正常に完了しました スコア :  2/5正確さ : 0%ログインして説明を見る 1/5 1/5 < Previous 次へ >