1

クエリで「重複キー更新時に挿入」を使用して、存在しない場合は新しい行を挿入するか、存在する場合は行を更新したいと思います。私が理解できないように見えるのは、一意のIDを持っていない場合にこれを使用する方法です(行がまだ作成されておらず、このIDは挿入時に自動インクリメントされるため)

insert into foodchoices (unique,notunique) values (Idonthavethis,'test')
on duplicate key update notunique = 'stuff';

上記の例では、「Idonthavethis」と表示されていますが、このフィールドにはまだ行として挿入されていないため、一意の値はありません。ただし、これが何らかの形で挿入されることを期待していますが、方法がわかりません。私はそれが次のように動作することを期待しています:

insert into foodchoices (notunique) values ('test')

しかし、それがすでに存在するフィールドである場合、私はその一意の値を持ちます。一意の値がない場合に使用できるワイルドカードまたは何かの形式はありますか?

4

3 に答える 3

3

私はこれに対する答えがMySQLドキュメントで扱われていると信じています:

テーブルにAUTO_INCREMENT列が含まれ、 INSERT...UPDATEが行を挿入する場合、LAST_INSERT_ID()関数は値を返しAUTO_INCREMENTます。ステートメントが代わりに行を更新する場合、LAST_INSERT_ID()は意味がありません。ただし、を使用してこれを回避できますLAST_INSERT_ID(expr)AUTO_INCREMENTidが列であると仮定します。更新をLAST_INSERT_ID()意味のあるものにするには、次のように行を挿入します。

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
于 2012-12-15T16:00:29.190 に答える
0

あなたがやろうとしているのは、あなたが持っている値を持つ行を選択することだと思います(存在する場合は更新します)、そうでない場合は挿入します。あと一文です。

持っていない既存の値 (生成された ID) を比較する方法がわかりません。さらに、ID が DB シードされている場合、どのように複製されますか?

于 2012-05-02T04:17:12.570 に答える
0

「notunique」列に制約を追加するには、テーブル構造を変更する必要があるかもしれません。だからあなたはできる:

insert into foodchoices (notunique) values ('test') on duplicate key update columntostoreyouruniqueid = unique;

notunique に制約がない場合は、uniqueid が設定されていることを意味します。したがって、クエリを二重にする必要があります。

于 2012-05-02T04:32:05.057 に答える