MySQLについて質問


テーブルA
フィールド1
フィールド2

レコードを追加or更新する場合なのですが、フィールド1に同じ値のレコードが存在する場合は、そのレコードのフィールド2を更新して、フィールド1に同じ値のレコードが存在しない場合はレコードを新規に登録するという流れを作りたいのですが、一度テーブルAを呼び出してフィールド1の値をチェックする方法しか思いつきません。

上記のような場合どの様にするのが良いのでしょうか?

回答の条件
  • 1人10回まで
  • 登録:2008/03/01 03:19:39
  • 終了:2008/03/08 03:20:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/03/01 07:52:38

ポイント35pt

一般的にはselectでinsertまたはupdateに条件分岐させますが、MySQLの場合ON DUPLICATE KEY UPDATEを使って1文にまとめることができます。詳細は下記リファレンスの最後の方を参照ください。

id:black_kenchan

物凄く参考になりました。

有難う御座います。

2008/03/02 02:30:21
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542008/03/01 14:29:35

ポイント35pt

こういった処理は、「存在すれば更新、存在しなければ追加」とするのが基本ですが、

MySQL 4.1以降なら、MySQLは独自仕様を持っています。


MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.3 INSERT 構文


INSERT文で、 ON DUPLICATE KEY UPDATE 節を

指定する方法です。


INSERT INTO table (a,b,c) VALUES (1,2,3)
 ON DUPLICATE KEY UPDATE c=c+1

は、a が UNIQUE として宣言されていて、かつすでに 1 度、値 1 を保持している場合、次の

コマンドと同じになる。


UPDATE table SET c=c+1 WHERE a=1

ただし、あくまでもMySQLの独自仕様ですので、他のRDBMSのサーバにも同じSQLを投げたいと

いった場合は使えませんので注意してください。

id:black_kenchan

物凄く参考になりました。

有難う御座います。

2008/03/02 02:30:43

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

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

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

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

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