• 締切済み

データの更新方法について

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

みんなの回答

  • sppla
  • ベストアンサー率51% (185/360)
回答No.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を選んでいます。 その時のいろいろな状況次第じゃないでしょうか?

回答No.3

2度SQL発行が許される環境(パフォーマンス、レスポンス)の場合は  DELINSあり 作成日、更新日などの登録履歴項目がある場合は  DELINSなし トランザクション管理をしてない場合は  DELINSなし

  • hwoa1024
  • ベストアンサー率36% (122/336)
回答No.2

例えばなんですが、質問者さんがネットで買い物をする際に、 Aという商品をカートに入れたとします。 それを購入する瞬間に商品情報が更新をされたとします。 deleteとinsert処理の間に購入の瞬間があったらどうなりますか? updateであればその商品情報が消えた瞬間はありませんが deleteとinsert処理の間には瞬間とはいえデータが存在しない瞬間ができることになります。 実際はロックをかけるのでこんなことはおきませんが。

tkwavek
質問者

お礼

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

回答No.1

Updateで済む処理をDeleteとInsertで処理すると、サーバの負荷は数倍から数十倍になります。(一般的な場合がそうであり、特殊な場合にはほぼ同等というのもあり得ますが) 個人で利用している分には構わないですが、事業として納入するようなものに組み込むと、以降は2度と声がかからなくなるでしょうね。

tkwavek
質問者

お礼

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

関連するQ&A

  • 別サーバーへのデータの同期更新方法

    2台のサーバーがあり、それぞれにオラクルがインストールされ テーブルやデータが同じように存在しているとします。 1つのサーバーのデータがプログラムにより 更新(Insert,update,delete)された時に もう1台のサーバーのデータも同じように更新したいのですが、 どのような仕組みで行えば可能でしょうか? (プログラムはあくまでも1台のサーバーのデータに対して  更新するという部分は変えれないとして)

  • VisualBasicを使用してのデータ更新方法についてお教えください

    VisualBasicをはじめたばかりの初心者です。 よろしくお願いいたします。 VisualBasicでは、データの更新(登録・修正・削除)を行う際、メゾッドを利用 してデータの更新を行う方法と、SQLを発行してデータの更新を行う方法があるこ とを書籍により知りましたが、具体的にどのように使い分ければいいのかよく理解できません。 皆さんは、どのような方法データの更新を行っているのでしょうか? 使い分けのポイント等があればお教えください。 よろしくお願いいたします。

  • MySQLで更新の結果を知るには

    こんばんは 業務で以下の切り分けをしたいのですが、可能でしょうか。 SOAP通信を使っていて、パフォーマンス的な観点から、select文は使用したくないと思っています。 ■環境 ・PHP5 ・MySQL ・FreeBSD6 ■やりたいこと Update文で更新を行ったときに、データそのものがなくて更新できなかったのか、データは存在するがPK以外の条件がマッチしなくて更新できなかったのかで、エラーコードを分けたい 例えば、  update tableA set column1='aaa' where pk1=1 and pk2=2 and column2='bbb'; といったSQL文で、「pk1=1 and pk2=2」に合致するデータがないのか、データは存在するが「column2='bbb'」には合致しなくて更新されないのかの切り分けをしたいのです。 かなり、困ってしまっています。 SQL文でできない場合でも、何かしらの解決方法がありましたら、よろしくお願いいたします!!!

  • ORACLEでのSQL、シンプルな方法は?

    ORACLEでのSQL文について質問です。 SQLで条件に合うレコードがあるかどうかはどう判別するのでしょうか? 画面で2つの条件を選んで テーブル ・ステータス ・フラグ 条件に合うレコードがなければINSERT 条件に合うレコードがあればUPDATE レコードが元々あるが、画面で指定された条件から外れる場合はDELETE としたいのですが、うまくSQLが書けません。 レコードがあればupdate、なければinsertするというのは多いのですが。 何かシンプルな方法はないでしょうか。

  • ASP.NET:複数結合テーブルのデータ変更方法について

    ASP.NET:複数結合テーブルのデータ変更方法について こんにちは。 現在Visual Studio2008(ASP.NET、ADO.NET) +SQL Server2005 Stdの環境でデータベースを参照したWebアプリケーションを作成しています。 GridViewを使い、データベースの内容を表示し、修正や追加、削除を行いたいと思っています。 (SQLのUpdate,Insert,Deleteに該当) 主キーが設定された単独のテーブルに対しては、GridView内のデータソースでデータベースを選び、 該当のテーブルを選択。その後「INSERT,UPDATEおよびDELETEステートメントの作成」オプションを選ぶことでこれらの変更方法が簡単に実装できるのを確認しております。 しかし、主キー外部キーの関係を持つ2つ以上のテーブルを結合したものに関してこれらの変更を行う場合は通常どのようにするのでしょうか。 何かヒントになるキーワードや参考になるコードを教えていただけないでしょうか? 単独のテーブルの時と同じく、結合したテーブルデータ(ビューに該当)をGridViewに表示し、そのGridView上で変更を行いたいと思っています。 SQL Server側でこれらのテーブルを結合したViewを作成し、これを選ぶことでGridViewに表示する事が可能なのは確認したのですが、やはり「INSERT,UPDATEおよびDELETEステートメントの作成」オプションは選択できませんでした。 以上よろしくお願いいたします。

  • 画面上のデータをDBに更新する時に楽な方法は

    .Netの開発で、画面の値をDBに更新する場合、 INSERT(UPDATE)のSQLの構文を作成して実行しているのですが、 画面の場合はアダプタを使って、SQLの生成から任せてしまった方が楽なんじゃないかと思ってます 何度か自分でそういったものを作って試したこともあるのですが、 自分が作成する以外で、そのような作り方をしているシステムに出会ったことが無く、どれもコツコツとSQLを書いているものばかりです Delphiなどで慣れているのもあってか、とても面倒に感じています もう少し楽な書き方を実践されている方は、いますでしょうか?

  • update時にtimestampが更新されない

    昨日SQLについて学び始めたばかりでわからないことが多く、質問させていただきます。 フィールドをtimestamp型で定義すれば、insert時やtimestamp時に自動的に日時が更新されるということですが、なぜかupdate時に更新されません。 insert時にはちゃんと日時が入りますし、insert後にtimestampのカラムにNULLをいれたときも更新されました。なせupdate時だけ更新されないのでしょう?

  • 更新ボタンを押してもデータが更新されない方法

    プログラミング初心者です。 INSERT INTOを使ってPHPからMYSQLにデータを書き込むページを作ったのですが、ブラウザの更新ボタンを押したり、戻るボタンでそのページにたどり着くと同じデータが再度書き込まれてしまいます。 このようにならないためにはどのように処理すればよろしいのでしょうか?一般的な方法を教えていただけたらありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 重複レコードの上書きについて

    重複レコードを上書きするSQL構文についての質問です。 SELECT文で更新対象のレコードが、 すでに存在しているかをどうかを確認にしてから、 UPDATE文を発行して更新する方法と、 DELETE文を発行して更新対象のレコードを削除した後に INSERT文で更新文のデータを追加する方法があるのですが、 処理的にはどちらが早くなるのものなんでしょうか?

  • SQLを完全にマスターする方法はありますか?

    SQLは基本的なselect, insert, update, deleteは知っていますが、中級以上のことができるように身につけたいのですが、どこから手をつけてよいかわかりません。試しながらSQLが学べる問題集や学習方法など知りたいです。 HAVING句や副問い合わせなど、実践でどういう場合に使うのか想像できない(そのそも理解する力が乏しいのか・・・)ので困っています。