データベーストランザクションを正しく使う
トランザクションは操作をアトミックな単位にまとめます。すべて成功するか、すべて失敗するかのどちらかです。ACID 特性と分離レベルを学びましょう。
- 1
トランザクションは原子的な作業単位です:BEGIN、操作、COMMIT または ROLLBACK。ACID:Atomicity (原子性、すべてか無か)、Consistency (一貫性、有効な状態)、Isolation (分離性、並行トランザクションが干渉しない)、Durability (永続性、コミット済みデータはクラッシュ後も残る)。分離レベル:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。分離が高いほど正確性が上がりますが、並行性は下がります。
- 2 SQL フォーマッター →
トランザクションステートメント (BEGIN、COMMIT、ROLLBACK、SAVEPOINT) を整形します。明確な整形により、すべての BEGIN に対応する COMMIT または ROLLBACK があることを確認しやすくなります。コミットの漏れは、ロックが無期限に保持される原因になります。
よくある質問
- どの分離レベルを使うべきですか?
- READ COMMITTED はほとんどのデータベースのデフォルトです。ダーティリードを防ぎますが、非再現リードとファントムリードは許します。REPEATABLE READ は非再現リードを防ぎます。SERIALIZABLE はすべての異常を防ぎますが、並行性が最も低くなります。ほとんどの場合は READ COMMITTED を、重要な一貫性が必要な場合 (送金など) は SERIALIZABLE を使ってください。
- デッドロックとは何ですか?
- 2 つのトランザクションがそれぞれ相手に必要なロックを保持し、両方が永遠に待機し続ける状態です。データベースはこれを検出し、どちらかを中断します (ROLLBACK)。デッドロックの防止には、一貫した順序でのロック取得、トランザクションを短く保つこと、適切な分離レベルの使用が有効です。発生したら、中断されたトランザクションを再試行してください。
このタスクを解決するワークフロー
関連ツール
SQL フォーマッター
Beautify or minify SQL queries online. Uppercase keywords, indent clauses, or compress to a single line。無料、プライベート、100%クライアントサイド。 ツール
JSON バリデーター
Validate JSON and pinpoint syntax errors by line and column。無料、プライベート、100%クライアントサイド。 ツール
ハッシュ計算ツール
Compute MD5, SHA-1, SHA-256, or SHA-512 hashes with hex or Base64 output。無料、プライベート、100%クライアントサイド。 ツール