Javaで例外処理メソッドとして使用されるmysqlユニークインデックス
-
06-07-2019 - |
質問
javaのsqlの一意のインデックスに基づいて例外をキャッチするのが良いかどうかを知りたいです
「1-0のエントリを複製する」などの例外をキャッチしたい場合は、例外を処理します。そうでなければ、データベーステーブルに適切に挿入しますか?
解決
私はあなたがそうしないと言います、2つの理由:
- エラーメッセージは少し不明瞭です:エラー1062(23000):キー1のエントリ 'xxx'が重複しています。どのキーが1であることを常に100%確信していますか?
- 特定のデータベースベンダーに固定します
トランザクションの方が簡単だと思います:
- 行の存在を確認する
- 行が既に存在する場合は例外をスローする;
- 新しい行を挿入します。
パフォーマンスの問題:
2回測定し、1回カットと言います。特定のユースケースの使用状況をプロファイルします。頭の中では、データベースの使用量が多いシナリオを除いて、パフォーマンスは問題になりません。
その特定の行に対して SELECT
を実行すると、そのデータはデータベースキャッシュに配置され、インデックスで行われた挿入チェックにすぐに使用されるためです INSERT
ステートメント用。また、このアクセスはインデックスによって支えられていることを念頭に置くと、パフォーマンスは問題にならないという結論につながります。
しかし、いつものように、測定します。
他のヒント
なぜそうなのかわかりません。挿入前にクエリを実行するよりもおそらく効率的です。ただし、エラーメッセージを認識するよりも、例外のエラーコードをキャッチする方がおそらく良いでしょう。
REPLACEコマンドを使用できます。レコードの存在に基づいて挿入/更新します。また、そのアトミックもクエリと挿入/更新ではありません。キー違反を検出した場合、何をしたいかによって異なりますか?
所属していません StackOverflow