こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MYSQLのレコードを上書きしたいのですが…

phpからMYSQL5に接続して以下のようなデータベースを作りました。

no name comment ←カラム名
1  山田 起きる
2  山田 叫ぶ
3  山田 寝る

これを上書きして、

no name comment
1  山田 食べる
2  山田 遊ぶ
3  山田 寝る

というようにレコードを更新したいのです。

しかし、どうやっても1、2、3の後に4、5、6と続いてしまいます。
「no」カラムにはauto_increment+primary keyを設定しています。

phpで構文を送る前に
mysql_query("alter table db1 auto_increment=0");

を設定してみたり、
mysql_query("insert into db1 (name,comment) value ('山田','$comment')");

mysql_query("replace into db1 (name,comment) value ('山田','$comment')");

を試してみましたが、上手く行きませんでした。

現在は、

mysql_query("delete from db1");
mysql_query("alter table db1 auto_increment=0");
---php処理---
mysql_query("insert into db1 (name,comment) value ('山田','$comment')");

というように、二度目の書き込みを行う前に一旦テーブル内のレコードを
すべて削除して書きなおすという方法を取っています。

しかし、数が多くなると一旦削除する作業を行うと処理が遅くなってしまうと思いますので、上書きしてデータベースを更新したいと思っているのですが、どのようにすればよいでしょうか?

投稿日時 - 2010-04-18 06:31:40

QNo.5833828

すぐに回答ほしいです

質問者が選んだベストアンサー

replace into db1(no,name,comment)
values
(1,"山田","食べる")
,(2,"山田","遊ぶ")
,(3,"山田","寝る")

でいいのでは?
replaceはユニークなフィールド情報を元にデータがあれば書き換え、
なければ追加する仕様なのだからここではprimaryなフィールドを
指定しないとデータが追加されるのは普通です

投稿日時 - 2010-04-18 10:19:51

補足

ありがとうございます。
実際に使う場合はレコードの数も多くなりますので、primaryなフィールド(no)は自動で挿入させたいのですが、それはphp側の処理で

mysql_query("replace into db1 (no,name,comment) value ($i,'山田','$comment')");

というように記述するしかないのでしょうか?

SQL文で1から自動的に値を代入させていく方法はありますか?

投稿日時 - 2010-04-18 18:01:28

ANo.2

このQ&Aは役に立ちましたか?

17人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんにちは

よくわからないんですが、上書きしたいという事は、上書きする対象のレコードが判断できるんですよね???

ご質問の例ですと、
1.起きる → 食べる
2.叫ぶ  → 遊ぶ

普通にUPDATEでいいんじゃないんですか?
わざわざREPLACEしている意味がわからないのですが・・・。
件数が多い場合というのがピンときません。
どのレコードのcommentカラムを書きかえるのかは、noカラムで指定しない限り判断できませんよね?
新規追加ならauto_incrementに意味がありますが、書き換える場合は対象レコードを判断できないと駄目なのはわかりますよね?
DELETE → INSERTの場合は、元のデータのnoが置き換わってしまうわけですから、全く別のデータになっています。
他のテーブルでnoを参照している場合は、データ連携がぐちゃぐちゃですが・・・?

投稿日時 - 2010-04-19 18:06:36

>レコードを更新したいので
普通に考えると UPDATE を使うのですが・・・何故 replace ?

投稿日時 - 2010-04-18 08:52:18

補足

ありがとうございます。
UPDATEも試したのですが、UPDATEの場合一度にすべての項目を書き換える時に使うことが多い関数であると解釈しました。

no name comment
1  山田 起きる
2  山田 叫ぶ
3  山田 寝る

これをUPdateを使った場合、
no name comment
1  山田 食べる
2  山田 食べる
3  山田 食べる



1  鈴木 起きる
2  鈴木 叫ぶ
3  鈴木 寝る

というように書き変えたい場合UPDATEを使うと良いと本に書いていたのですが、レコードごとにcommentを変えて一気に書き換えることはできるのでしょうか?

投稿日時 - 2010-04-18 16:20:07

あなたにオススメの質問