2つの理由から、そうしないと言います。
- エラーメッセージは少し不明瞭です:エラー1062(23000):キー1のエントリ「xxx」が重複しています 。どのキーが1であるかを常に100%確信していますか?
- 特定のデータベースベンダーに固定されます
トランザクションの方が簡単だと思います :
- 行の存在を確認します;
- 行がすでに存在する場合は例外をスローします。
- 新しい行を挿入します。
パフォーマンスの問題 :
2回測定し、1回カットする 。特定のユースケースの使用法をプロファイリングします。頭のてっぺんに、データベースの使用頻度が高いシナリオを除いて、パフォーマンスは問題にならないでしょう。
その理由は、SELECT
を実行すると その特定の行に、そのデータはデータベースキャッシュに配置され、すぐに INSERT
のインデックスで行われる挿入チェックに使用されます 声明。また、このアクセスはインデックスによって裏付けられていることを念頭に置いておくと、パフォーマンスは問題にならないという結論につながります。
ただし、いつものように、測定してください。