プロが教える店舗&オフィスのセキュリティ対策術

データを更新するときSQLで
DeleteしてInsertする更新方法と
Updateを行う更新方法とがあると思うのですが
この使い分け、切り分けはどういう視点になるのでしょうか

私はDeleteしてInsertする方が簡単なので
Delete + Insertをよく使っています。

A 回答 (4件)

私もDelete + Insertを使うことはありますね。


これを使う時は大体以下のような1対多のデータ構造の多側の更新の時です。

○○株式会社から商品を受注したのを登録する際に、1側のデータとして受注番号や○○株式会社という相手の名前があり、明細(多側)に受注した商品とその数量があるような例です。
明細側のデータが最初以下のようだったとします。
商品A 1個
商品B 3個
商品C 5個

これを画面で以下のように修正したとする。
(商品Aは削除)
商品B 3個
商品C 10個 (数量が変更)
商品D 20個 (新しく商品を追加)

こういう状況で、なくなった明細にはdelete、追加された明細にはinsert、変更があった明細にはupdateなどとSQLを使い分けて発行するのは面倒なので、明細行をデータベースから全てdeleteして、画面の明細全てをinsertという実装にします。

まぁ私の担当の業務は通常はそれほどトランザクションが頻繁には起きませんし、SQLの使い分けの場合はコーディングに手間がかかるうえに、実行速度もたぶん向上しないだろうという判断で、コーディングの簡単なdelete、insertを選んでいます。

その時のいろいろな状況次第じゃないでしょうか?
    • good
    • 0

2度SQL発行が許される環境(パフォーマンス、レスポンス)の場合は


 DELINSあり

作成日、更新日などの登録履歴項目がある場合は
 DELINSなし

トランザクション管理をしてない場合は
 DELINSなし
    • good
    • 0

例えばなんですが、質問者さんがネットで買い物をする際に、


Aという商品をカートに入れたとします。

それを購入する瞬間に商品情報が更新をされたとします。

deleteとinsert処理の間に購入の瞬間があったらどうなりますか?
updateであればその商品情報が消えた瞬間はありませんが
deleteとinsert処理の間には瞬間とはいえデータが存在しない瞬間ができることになります。

実際はロックをかけるのでこんなことはおきませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Delete Insertは使わないほうがいいということですようね。
会社ではDelete Insertを使ったプログラムがあったので
それをそのまま利用していました。

お礼日時:2012/10/04 14:57

Updateで済む処理をDeleteとInsertで処理すると、サーバの負荷は数倍から数十倍になります。

(一般的な場合がそうであり、特殊な場合にはほぼ同等というのもあり得ますが)
個人で利用している分には構わないですが、事業として納入するようなものに組み込むと、以降は2度と声がかからなくなるでしょうね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Delete Insertは使わないほうがいいということですようね。
会社ではDelete Insertを使ったプログラムがあったので
それをそのまま利用していました。

お礼日時:2012/10/04 14:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています