- PR -

Insertが先 Updateが先 

投稿者投稿内容
のん吉
会議室デビュー日: 2007/07/05
投稿数: 8
投稿日時: 2008-07-23 17:59
皆さんに質問です。

現在、VisualStudio2005 C#で開発をおこなっています。

そこで、DBの更新処理で
@Insertで重複エラーをキャッチしたらUpdateをする
AUpdateで件数が0件だったら、Insertをする
BSelectでデータがあるかチェックしてから、InsertかUpdateをする
のどれを採用するかなやんでいます。

社内では、@とAはどっちでも一緒だから好みでいいんじゃないか?
と言う話になっていますが、皆さんはどれを採用していますか?
また、こうだからこっちなんだー!!と言う話があれば教えて下さい。



さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-07-23 18:18
さかもとと申します。

私は、3番ですね。

例外拾ってたりするとコスト上がると思いますし。
Updateもロックとかそのあたり考えないといけませんし。

少なくとも1の発想はなかったので驚きです。


_________________
------------------------------------------
拝啓、さかもとと申します♪
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-07-23 18:25
1の方法は別の人がやっていたのですが、環境によっては例外が発生したときにロールバックが起こってしまい、それ以降は禁止にしました。
2は、更新時刻を使った楽観同時実行制御と相性が悪いので使わないです。

というわけで、私も3番ですかねぇ。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-07-23 18:26
私は3番です。それ以外はあまりにもナンセンスとしか
いいようがないです。
2番の方法に関しては、予想外としかいいようがないです。
KATSU
常連さん
会議室デビュー日: 2003/02/13
投稿数: 33
お住まい・勤務地: 静岡県
投稿日時: 2008-07-23 18:29
katsuと申します。

私も、基本は3番です。

が、

ほとんどの場合、Insertした結果正常に登録されるハズ。で、
万が一重複エラーが起きたときはUpdate 的なニュアンスで良ければ 
1番。

ほとんどの場合、Updateした結果正常に登録されるハズ。で、
万が一更新結果がゼロ件だったらInsert 的なニュアンスで良ければ
2番。

という選択も無きにしもあらず...

1番と2番、扱うデータの性格によっては、
「どちらも一緒」ではないと思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-07-23 18:30
そういえば、こんな方法でやってる人がいました。

・Selectでデータがあるかチェックして、データがなければとりあえず初期値でInsertする
・Updateする

特に問題はなさそうだったので、そのときはスルーしたのですが…。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-07-23 18:40
使用しているDBがMERGE文を、サポートしているならそれを使用し
サポートしていなければ3番で実装します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-23 18:58
前提がなぁ...


同時アクセスがあり得、プライマリ キーを、「ユーザーが入力する」「抜けが発生してはいけない連番」とかなら、4番(ぉぃ

プライマリ キーをシステムに任せて仕舞うなら、3番。
UX の如何によっては、1番もあり得るかも???


要は、ユーザー操作とデータの関係を、もっと詳細に詰めて下さい。

スキルアップ/キャリアアップ(JOB@IT)