- ベストアンサー
MYSQLのレコードの上書き方法
- MYSQLのレコードを上書きする方法についてご相談です。現在、noカラムにauto_increment+primary keyを設定しているため、新しいレコードが追加されるとnoの値が自動的に増えてしまう状況です。上書きしたい場合、一度テーブル内のレコードを削除し、全てのレコードを再度挿入する方法を取っていますが、数が多くなると処理が遅くなります。より効率的な方法をご教示いただきたいです。
- 上記のような状況で、MYSQLのレコードを上書きする方法をご質問されています。noカラムにはauto_increment+primary keyが設定されており、レコードを追加する際にnoの値が自動的に増えてしまいます。上書きしたい場合、現在は一度テーブル内のレコードを削除してから再度挿入する方法を取っていますが、これでは処理が遅くなります。より効率的な方法があれば教えていただきたいとのことです。
- MYSQLのレコードを上書きする方法についてアドバイスをいただきたいです。現在、noカラムにauto_increment+primary keyを設定しており、新しいレコードの挿入ごとにnoの値が自動的に増えていく仕組みになっています。上書きしたい場合、一度テーブル内のレコードを削除し、全てのレコードを再度挿入する方法を使っていますが、この方法では処理が遅くなる恐れがあります。効率的な上書き方法があれば教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
replace into db1(no,name,comment) values (1,"山田","食べる") ,(2,"山田","遊ぶ") ,(3,"山田","寝る") でいいのでは? replaceはユニークなフィールド情報を元にデータがあれば書き換え、 なければ追加する仕様なのだからここではprimaryなフィールドを 指定しないとデータが追加されるのは普通です
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは よくわからないんですが、上書きしたいという事は、上書きする対象のレコードが判断できるんですよね??? ご質問の例ですと、 1.起きる → 食べる 2.叫ぶ → 遊ぶ 普通にUPDATEでいいんじゃないんですか? わざわざREPLACEしている意味がわからないのですが・・・。 件数が多い場合というのがピンときません。 どのレコードのcommentカラムを書きかえるのかは、noカラムで指定しない限り判断できませんよね? 新規追加ならauto_incrementに意味がありますが、書き換える場合は対象レコードを判断できないと駄目なのはわかりますよね? DELETE → INSERTの場合は、元のデータのnoが置き換わってしまうわけですから、全く別のデータになっています。 他のテーブルでnoを参照している場合は、データ連携がぐちゃぐちゃですが・・・?
- qaz_qwerty_me
- ベストアンサー率19% (214/1115)
>レコードを更新したいので 普通に考えると UPDATE を使うのですが・・・何故 replace ?
補足
ありがとうございます。 UPDATEも試したのですが、UPDATEの場合一度にすべての項目を書き換える時に使うことが多い関数であると解釈しました。 no name comment 1 山田 起きる 2 山田 叫ぶ 3 山田 寝る これをUPdateを使った場合、 no name comment 1 山田 食べる 2 山田 食べる 3 山田 食べる や 1 鈴木 起きる 2 鈴木 叫ぶ 3 鈴木 寝る というように書き変えたい場合UPDATEを使うと良いと本に書いていたのですが、レコードごとにcommentを変えて一気に書き換えることはできるのでしょうか?
補足
ありがとうございます。 実際に使う場合はレコードの数も多くなりますので、primaryなフィールド(no)は自動で挿入させたいのですが、それはphp側の処理で mysql_query("replace into db1 (no,name,comment) value ($i,'山田','$comment')"); というように記述するしかないのでしょうか? SQL文で1から自動的に値を代入させていく方法はありますか?