匿名質問者

MySQLのreplace intoの使い方について


今回、MySQLのreplace intoについて質問をしたいと思います。
テーブルAには、「ip(int)」と「count(int)」という列があります。主キーは「ip」とします。
まず、insert文で「ip」に「1234」と、countに「1」を書き込みます。
そして、replace intoを利用して、以下のSQLを実行します。

REPLACE INTO `A` SET `ip` = 1234 , `count` = `count` + 1

当方の希望としては、「ip」が「1234」の行の「count」をプラス1して、「2」にしたいと思ったのですが、上記のSQL文を実行すると「count」が「1」になってしまいます。
解決方法がございましたら是非ご教授いただければと存じます。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/06/13 17:29:23

ベストアンサー

匿名回答1号 No.1

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

現在の行から値を参照し、それらを新しい行の中で利用する事はできません。もし、SET col_name = col_name + 1 のような割り当てを利用すると、右側のカラム名の参照は DEFAULT(col_name) として扱われるので、その割り当ては SET col_name = DEFAULT(col_name) + 1 と同等になります。

http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html

例えば、もしカラム a が UNIQUE として宣言され、それが値 1 を含んでいたら、次の2つのステートメントは同一効果を持ちます。

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

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

もしその行が新しいレコードとして挿入されると、行に影響される値は1となり、もし既存レコードが更新されると2になります。

匿名質問者

ご回答ありがとうございます。
こちらの上記の方法を試してみたところ希望のようになりました。
本日は誠にありがとうございました。

2013/06/13 17:29:14

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

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

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

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

回答リクエストを送信したユーザーはいません