2017-10-26 9 views
0

のためのキーを複製、私は現在多行挿入とMySQLの主キー

INSERT INTO test (uid, datetime, precip, sds) VALUES (?,?,?,?) on duplicate key update uid = "<uid>"; 

(uidが主キーである)以下のようにinsert文を持っています今、私は、MySQLで複数行の挿入を実行する必要があります。私は、uidが既に存在するかどうかをチェックし、別のものを更新する必要があります。 uidは主キーであるため、新しい各行には新しいuidが含まれます。以下の構文が正しいかどうかお知らせください。あなたがメインのUIDがデータベースにすでに存在する場合、代替UIDで新しい行を作成したい

まず解釈:

INSERT INTO test (uid, datetime, precip, sds) VALUES (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?) on duplicate key update uid = values(<uid for first record>), uid = values(<uid for second record>), uid = values(<uid for third record>), uid = values(<uid for fourth record>); 

+0

テストテーブルにあるキーを提供してください。 –

+0

テストテーブルの主キーは 'uid'で、これは外部キーのないテーブルの唯一のキーです。 だから、いつでも同じuidが見られ、すべての列を更新する必要がある、他の –

+0

を挿入しかし、あなたは重複key'句に 'で、このキーを使用することはできません... この句は、別の方法で動作します...あなたが持っている場合'duplicate key'の場合、' datetime'の値やdbの既存レコードの別のフィールドを変更できますが、テーブルに挿入しようとしている値を変更することはできません。また 'uid'は、プライマリおよび一意のキーであり、あなたがここに重複がある場合、それはあなたのシステムの設計に大きな問題を抱えている意味... –

答えて

0

ご質問は明確ではないが、二つの解釈があります。

「新しい各行に新しいuidが含まれています」と書いているように、これは正しい解釈をしています。しかし、これは全く自然に見えません。

この場合、ON DUPLICATE KEY UPDATEは正しいツールではありません。updateその名前で示されている既存の生のものは新しいものを作成しません。

これを実装するには、普通はinsertかもしれません。挿入が成功したかどうか、重複したuidのために失敗した場合は、代替のuidを挿入してください。再度競合する場合は何をしたいのか分かりません。ループでこれを実行しますか?間違った方向に見える。

第二に解釈

同じUIDを持つ行が存在する場合は、更新したい

、他の新しいを挿入します。言い換えれば、新しい行を挿入するだけで、既存の行があれば更新するだけです。

これは、「uidがすでに存在しているかどうかを確認し、別のものを更新する必要があります」と書かれているように、「重複しているキー更新」で試しているように見えます。また、より自然に見えます。これを実現するために

、あなたは新しい値でON DUPLICATE KEY UPDATEupdateに既存の行を使用することができます(ただし、uidには触れないでください)として:

INSERT INTO test (uid, datetime, precip, sds) 
VALUES (?,?,?,?) 
ON DUPLICATE KEY UPDATE 
    datetime = VALUES(datetime), 
    precip = VALUES(precip), 
    sds = VALUES(sds) 

そして、あなたが複数の値を持つときON DUPLICATE KEY UPDATE文は変更されません。

「行が存在する場合は、datetime、precipおよびsdsを更新します」と表示されます。

関連する問題