コンテンツへスキップ
uencoder

データベーストランザクションを正しく使う

トランザクションは操作をアトミックな単位にまとめます。すべて成功するか、すべて失敗するかのどちらかです。ACID 特性と分離レベルを学びましょう。

  1. 1

    トランザクションは原子的な作業単位です:BEGIN、操作、COMMIT または ROLLBACK。ACID:Atomicity (原子性、すべてか無か)、Consistency (一貫性、有効な状態)、Isolation (分離性、並行トランザクションが干渉しない)、Durability (永続性、コミット済みデータはクラッシュ後も残る)。分離レベル:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。分離が高いほど正確性が上がりますが、並行性は下がります。

  2. 2
    SQL フォーマッター →

    トランザクションステートメント (BEGIN、COMMIT、ROLLBACK、SAVEPOINT) を整形します。明確な整形により、すべての BEGIN に対応する COMMIT または ROLLBACK があることを確認しやすくなります。コミットの漏れは、ロックが無期限に保持される原因になります。

よくある質問

どの分離レベルを使うべきですか?
READ COMMITTED はほとんどのデータベースのデフォルトです。ダーティリードを防ぎますが、非再現リードとファントムリードは許します。REPEATABLE READ は非再現リードを防ぎます。SERIALIZABLE はすべての異常を防ぎますが、並行性が最も低くなります。ほとんどの場合は READ COMMITTED を、重要な一貫性が必要な場合 (送金など) は SERIALIZABLE を使ってください。
デッドロックとは何ですか?
2 つのトランザクションがそれぞれ相手に必要なロックを保持し、両方が永遠に待機し続ける状態です。データベースはこれを検出し、どちらかを中断します (ROLLBACK)。デッドロックの防止には、一貫した順序でのロック取得、トランザクションを短く保つこと、適切な分離レベルの使用が有効です。発生したら、中断されたトランザクションを再試行してください。

このタスクを解決するワークフロー

関連ツール