トランザクション管理
PL/SQLでのトランザクション管理は、データの一貫性と整合性を確保するために重要です。トランザクション管理には、COMMIT
、ROLLBACK
、SAVEPOINT
の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;