sqlについて。

レコードがあれば、update、なければinsertするSQLを考えています。

php+mysqlを使うのですが、この処理を一番シンプルで負荷をかけない方法を取るにはどうすればいいのでしょうか?

一旦検索して、あるかどうかを調べて、PHPでレコードがあったら~と分岐させるよりも簡単にできないものでしょうか?

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2006/11/24 23:13:06
  • 終了:2006/12/01 23:17:17

回答(3件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/11/24 23:17:46

ポイント27pt

http://dev.mysql.com/doc/refman/4.1/ja/replace.html

REPLACE 構文で出来ます。

ただし、マニュアルにもあるように Primary Key か、UNIQUE インデックスが設定されている事が前提となります。

id:dingding

項目がa,b,nとあるとして、

a,bの組み合わせがユニークであるという条件で検索して、その組み合わせがなければ、n+1にするということをしたいと考えています。

その場合は、これは使えないですよね。

テーブルの構成事体を変えても構わないのですが、この場合はやはり他の方法になるのでしょうか?

例えば、aaa,bbb,n,aaa+bbbのようにして、一意であるかどうかを判断するためだけの項目を一つ作るのは、適切ではないでしょうか?

2006/11/24 23:30:57
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/11/24 23:29:31

ポイント27pt

http://dev.mysql.com/doc/refman/4.1/ja/replace.html

a,b の2カラムで主キーもしくはUNIQUE制約が付くのであれば十分です。

Primary Key および、UNIQUE インデックスは複数列でも可能ですし、REPLACE に複数列でダメという制限も記述されていません。

id:dingding

それは気づきませんでした。

ありがとうございます。

調べてみます。

2006/11/24 23:34:52
id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/11/24 23:56:45

ポイント26pt

>レコードがあれば、update、なければinsert

>するSQLを考えています。

レコードがあれば REPLACEだとDELETE→INSERT

なければINSERTになるような気もしますが。


INSERT

http://dev.mysql.com/doc/refman/4.1/ja/insert.html

INSERTのON DUPLICATE KEY UPDATE を

使えば、重複時には、UPDATE~

重複しない場合には、INSERTの部分が動作します。

id:dingding

ありがとうございます。

しかし、困ったことにMySQLのバージョンが4.0.24でした。使えないようです。

2006/11/25 00:51:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません