Mysql中Insert into xxx on duplicate key udate問題


例えば、列aがuniqueと定義され、値が1である場合、以下の文にも同様の効果があるということは、一度出入りした記録にa=1が存在すると、c=c+1は直接更新され、c=3の動作は行われない。
 
insert into table(a, b, c) values (1, 2, 3) on duplicate key
update c = c + 1;1 update table set c = c + 1 where a = 1;
のもう一つの言及に値するのは、この文の知識mysqlの中で、標準sql文の中にはありません。INSERT INTO.ON DUPLICATE KEYが複数行の記録を更新します。INSERT文の末尾にON DUPLICATE KEY UDATEを指定した場合、行を挿入するとUNIQUEインデックスまたはPRIMARY KEYに重複値が発生し、旧行UPDATEを実行します。一意の値列が重複しない場合は、新しい行を挿入します。例えば、列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です。INSERT INTO.ON DUPLICATE KEYの機能説明についてもっと知りたいなら、詳しくはMySQL参照文書:13.2.4.INSERT文法は現在問題があります。INSERTマルチ行記録なら、ON DUPLICATE KEY UDATEの後ろのフィールドの値はどう指定されますか?一つのINSERT文にはワンマンDUPLICATE KEY UDATEしかないということを知りたいです。彼は一行の記録を更新しますか?それともすべての更新が必要な行を更新します。この問題は長い間悩んでいましたが、実はVALES関数を使ってすべての問題を解決しました。たとえば、フィールドaはUNIQUEとして定義され、元のデータベーステーブルテーブルテーブルテーブルテーブルテーブルテーブルテーブルテーブルテーブルテーブルに既に記録(2,2,9)と(3,2,1)が存在しています。挿入レコードのa値が元のレコードと重複していると、既存のレコードを更新します。そうでなければ、新しい行を挿入します。
 
INSERT INTO TABLE (a,b,c) VALUES
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)
ON DUPLICATE KEY UPDATE b=VALUES(b);
以上のSQL文の実行は、(2,5,7)のaと元のレコード(2,2,2,2,2,2,2,2,9)が元のAと元のレコード(2,2,2,2,2,9)に衝突しています既存のレコード(2,2,9)を(2,5,9)に更新し、(3,2,1)を(3,3,1)に更新し、新記録(1,2,3)と(4,8,2)を挿入します。