⑪トランザクション

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

トランザクション

トランザクションとは、データベースに対して実行される作業単位のことです。トランザクションは、ユーザーによる手動の方法であろうがなんらかの種類のデータベースプログラムによるものであろうが、論理的順序で達成される単位または一連の作業である。

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

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


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

トランザクションには、以下の4つの標準プロパティーがあります。通常、ACIDという頭文字で示されます。

  • アトミック性 – 作業単位内のすべての操作が正常に完了することを保証します。それ以外の場合、トランザクションは障害発生時に中断され、以前のすべての操作は元の状態にロールバックされます。
  • Consistency 整合性 – トランザクションが正常にコミットされたときに、データベースが状態を正しく変更するようにします。
  • Isolation 分離 – トランザクションを互いに独立して、相互に透過的に動作させることができます。
  •  Durability 耐久性 – システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が確実に維持されます。

トランザクション制御

次のコマンドは、トランザクションを制御するために使用されます。

  • COMMIT – 変更を保存します。
  • ROLLBACK -変更をロールバックします。
  • SAVEPOINT – ROLLBACKするトランザクションのグループ内にポイントを作成します。
  • SET TRANSACTION – トランザクションに名前を付けます。

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

トランザクション制御コマンドは、INSERT、UPDATE、DELETEなどのDMLコマンドでのみ使用されます。これらの操作はデータベース内で自動的にコミットされるため、テーブルの作成中または削除中は使用できません。

COMMITコマンド

COMMITコマンドは、トランザクションによって呼び出された変更をデータベースに保存するために使用されるトランザクションコマンドです。

COMMITコマンドは、トランザクションによって呼び出された変更をデータベースに保存するために使用されるトランザクションコマンドです。COMMITコマンドは、最後のCOMMITコマンドまたはROLLBACKコマンド以来、すべてのトランザクションをデータベースに保存します。

COMMITコマンドの構文は次のとおりです。

COMMIT;

以下のレコードを持つCUSTOMERSテーブルを考えてみましょう。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | kodak    |  32 | Ahmedabad |  2000.00 |
|  2 | nikon    |  25 | Delhi     |  1500.00 |
|  3 | suzuki   |  23 | Kota      |  2000.00 |
|  4 | nissan   |  25 | Mumbai    |  6500.00 |
|  5 | tometo   |  27 | Bhopal    |  8500.00 |
|  6 | nakag    |  22 | MP        |  4500.00 |
|  7 | toshiki  |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

次の例では、age = 25のテーブルからレコードを削除し、データベースの変更をCOMMITします。

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

したがって、表の2つの行が削除され、SELECT文は次の結果を生成します。
+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+
| 1 | kodak | 32 | Ahmedabad | 2000.00 |
| 3 | suzuki | 23 | Kota | 2000.00 |
| 4 | nissan | 25 | Mumbai | 6500.00 |
| 5 | tometo | 27 | Bhopal | 8500.00 |
| 6 | nakag | 22 | MP | 4500.00 |
| 7 | toshiki | 24 | Indore | 10000.00 |
+—-+———-+—–+———–+———-+

ROLLBACKコマンド

ROLLBACKコマンドは、まだデータベースに保存されていないトランザクションを元に戻すために使用されるトランザクションコマンドです。このコマンドは、最後のCOMMITまたはROLLBACKコマンドが発行されてからトランザクションを元に戻すためにのみ使用できます。

ROLLBACKコマンドの構文は次のとおりです。

ROLLBACK;

以下のレコードを持つCUSTOMERSテーブルを考えてみましょう。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | kodak    |  32 | Ahmedabad |  2000.00 |
|  2 | nikon    |  25 | Delhi     |  1500.00 |
|  3 | suzuki   |  23 | Kota      |  2000.00 |
|  4 | nissan   |  25 | Mumbai    |  6500.00 |
|  5 | tometo   |  27 | Bhopal    |  8500.00 |
|  6 | nakag    |  22 | MP        |  4500.00 |
|  7 | toshiki  |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

次の例では、age = 25のテーブルからレコードを削除し、データベースの変更をROLLBACKします。

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

したがって、削除操作はテーブルに影響を与えず、SELECT文は次の結果を生成します。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | kodak    |  32 | Ahmedabad |  2000.00 |
|  2 | nikon    |  25 | Delhi     |  1500.00 |
|  3 | suzuki   |  23 | Kota      |  2000.00 |
|  4 | nissan   |  25 | Mumbai    |  6500.00 |
|  5 | tometo   |  27 | Bhopal    |  8500.00 |
|  6 | nakag    |  22 | MP        |  4500.00 |
|  7 | toshiki  |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SAVEPOINTコマンド

SAVEPOINTは、トランザクション全体をロールバックせずにトランザクションを特定のポイントにロールバックできるようになります

SAVEPOINTコマンドの構文は次のとおりです。

SAVEPOINT SAVEPOINT_NAME;




このコマンドは、すべてのトランザクション文の中でSAVEPOINTを作成する場合にのみ使用されます。ROLLBACKコマンドは、トランザクションのグループを取り消すために使用されます。

SAVEPOINTにロールバックする構文は次のとおりです。

ROLLBACK TO SAVEPOINT_NAME;

以下は、CUSTOMERSテーブルから3つの異なるレコードを削除する予定の例です。各削除の前にSAVEPOINTを作成して、いつでもSAVEPOINTをROLLBACKして適切なデータを元の状態に戻すことができます。

次のレコードを持つCUSTOMERSテーブルを考えてみましょう。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | kodak    |  32 | Ahmedabad |  2000.00 |
|  2 | nikon    |  25 | Delhi     |  1500.00 |
|  3 | suzuki   |  23 | Kota      |  2000.00 |
|  4 | nissan   |  25 | Mumbai    |  6500.00 |
|  5 | tometo   |  27 | Bhopal    |  8500.00 |
|  6 | nakag    |  22 | MP        |  4500.00 |
|  7 | toshiki  |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

次のコードブロックには一連の操作が含まれています。

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

3つの削除が行われたの後あなたはSP2として特定したSAVEPOINTにROLLBACKすることに決めました。SP2は最初の削除後に作成されたため、最後の2つの削除は取り消されます。
+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+ |
| 2 | nikon | 25 | Delhi | 1500.00 |
| 3 | suzuki | 23 | Kota | 2000.00 |
| 4 | nissan | 25 | Mumbai | 6500.00 |
| 5 | tometo | 27 | Bhopal | 8500.00 |
| 6 | nakag | 22 | MP | 4500.00 |
| 7 | toshiki | 24 | Indore | 10000.00 |
+—-+———-+—–+———–+———-+
6 rows selected.

RELEASE SAVEPOINTコマンド

RELEASE SAVEPOINTコマンドは、作成したSAVEPOINTを除去するために使用されます。

RELEASE SAVEPOINTコマンドの構文は次のとおりです。

RELEASE SAVEPOINT SAVEPOINT_NAME;

SAVEPOINTが解放されると、ROLLBACKコマンドを使用して、最後のSAVEPOINT以降に実行されたトランザクションを元に戻すことはできなくなります。

SET TRANSACTIONコマンド

SET TRANSACTIONコマンドを使用すると、データベース・トランザクションを開始できます。このコマンドは、後続のトランザクションの特性を指定するために使用されます。たとえば、トランザクションを読み取り専用または読み取り専用に指定することができます。

SET TRANSACTIONコマンドの構文は次のとおりです。

SET TRANSACTION [ READ WRITE | READ ONLY ];




前のページ⑩HAVINGk句

次のページ⑫LIKE演算子

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。