0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】トランザクション

Posted at

トランザクション管理

PL/SQLでのトランザクション管理は、データの一貫性と整合性を確保するために重要です。トランザクション管理には、COMMITROLLBACKSAVEPOINTの3つの主要なコマンドがあります。

トランザクションの基本概念

トランザクションは、一連のデータベース操作を単一の論理単位として扱うものです。トランザクションの主な特性は以下の通りです。

  • 原子性 (Atomicity): トランザクション内のすべての操作は一つの単位として扱われ、すべて成功するか、すべて失敗する。
  • 一貫性 (Consistency): トランザクションが終了すると、データベースの状態が一貫したものになる。
  • 独立性 (Isolation): トランザクションは互いに独立して実行され、同時に実行される場合でも結果は個々のトランザクションが順番に実行された場合と同じになる。
  • 耐久性 (Durability): トランザクションが完了すると、その結果は永続的に保存される。

COMMIT

COMMITコマンドは、トランザクションを終了し、すべての変更をデータベースに確定させます。これにより、他のユーザーが変更内容を確認できるようになります。

例: COMMITの使用

BEGIN
    UPDATE employees
    SET salary = salary * 1.10
    WHERE department_id = 10;

    COMMIT; -- 変更を確定
END;

ROLLBACK

ROLLBACKコマンドは、トランザクションを終了し、トランザクション内のすべての変更を取り消します。これにより、データベースはトランザクション開始前の状態に戻ります。

例: ROLLBACKの使用

BEGIN
    UPDATE employees
    SET salary = salary * 1.10
    WHERE department_id = 10;

    ROLLBACK; -- 変更を取り消し
END;

SAVEPOINT

SAVEPOINTコマンドは、トランザクション内の特定のポイントを設定します。ROLLBACK TO SAVEPOINTコマンドを使用することで、トランザクション全体を取り消すのではなく、指定したセーブポイントまでの変更を取り消すことができます。

例: SAVEPOINTとROLLBACK TO SAVEPOINTの使用

BEGIN
    UPDATE employees
    SET salary = salary * 1.10
    WHERE department_id = 10;

    SAVEPOINT before_bonus; -- セーブポイントを設定

    UPDATE employees
    SET salary = salary + 1000
    WHERE department_id = 10;

    -- エラーが発生した場合、セーブポイントまでロールバック
    IF SQL%ROWCOUNT = 0 THEN
        ROLLBACK TO before_bonus;
    ELSE
        COMMIT; -- 変更を確定
    END IF;
END;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?