- - PR -
Insertが先 Updateが先
1|2|3|4
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-23 17:59
皆さんに質問です。
現在、VisualStudio2005 C#で開発をおこなっています。 そこで、DBの更新処理で @Insertで重複エラーをキャッチしたらUpdateをする AUpdateで件数が0件だったら、Insertをする BSelectでデータがあるかチェックしてから、InsertかUpdateをする のどれを採用するかなやんでいます。 社内では、@とAはどっちでも一緒だから好みでいいんじゃないか? と言う話になっていますが、皆さんはどれを採用していますか? また、こうだからこっちなんだー!!と言う話があれば教えて下さい。 |
|
投稿日時: 2008-07-23 18:18
さかもとと申します。
私は、3番ですね。 例外拾ってたりするとコスト上がると思いますし。 Updateもロックとかそのあたり考えないといけませんし。 少なくとも1の発想はなかったので驚きです。 _________________ ------------------------------------------ 拝啓、さかもとと申します♪ |
|
投稿日時: 2008-07-23 18:25
1の方法は別の人がやっていたのですが、環境によっては例外が発生したときにロールバックが起こってしまい、それ以降は禁止にしました。
2は、更新時刻を使った楽観同時実行制御と相性が悪いので使わないです。 というわけで、私も3番ですかねぇ。 |
|
投稿日時: 2008-07-23 18:26
私は3番です。それ以外はあまりにもナンセンスとしか
いいようがないです。 2番の方法に関しては、予想外としかいいようがないです。 |
|
投稿日時: 2008-07-23 18:29
katsuと申します。
私も、基本は3番です。 が、 ほとんどの場合、Insertした結果正常に登録されるハズ。で、 万が一重複エラーが起きたときはUpdate 的なニュアンスで良ければ 1番。 ほとんどの場合、Updateした結果正常に登録されるハズ。で、 万が一更新結果がゼロ件だったらInsert 的なニュアンスで良ければ 2番。 という選択も無きにしもあらず... 1番と2番、扱うデータの性格によっては、 「どちらも一緒」ではないと思います。 |
|
投稿日時: 2008-07-23 18:30
そういえば、こんな方法でやってる人がいました。
・Selectでデータがあるかチェックして、データがなければとりあえず初期値でInsertする ・Updateする 特に問題はなさそうだったので、そのときはスルーしたのですが…。 |
|
投稿日時: 2008-07-23 18:40
使用しているDBがMERGE文を、サポートしているならそれを使用し
サポートしていなければ3番で実装します。 |
|
投稿日時: 2008-07-23 18:58
前提がなぁ...
同時アクセスがあり得、プライマリ キーを、「ユーザーが入力する」「抜けが発生してはいけない連番」とかなら、4番(ぉぃ プライマリ キーをシステムに任せて仕舞うなら、3番。 UX の如何によっては、1番もあり得るかも??? 要は、ユーザー操作とデータの関係を、もっと詳細に詰めて下さい。 |
1|2|3|4
次のページへ»