1

APIを使用して別のサーバーからレコードをフェッチし、ローカルデータベースに挿入していますが、特定のフィールドapiserverIDが重複している場合は、フィールドを更新したいだけです。私の問題は、私が次のようなテーブル構造を持っていることです

  • myPrimaryKey
  • apiserverID
  • ...。
  • ....。
  • ....。
  • 更新日

apiserverIDが重複している場合は、行を更新する簡単な手順が必要です。私が知っている唯一の解決策は、キーapiserverIDが存在するかどうかをチェック(SELECT)してから、更新するか、挿入する必要があることです。しかし、私はこれのためにプログラミングをしたくありませんこれは1つのクエリで可能です

編集:主な問題は、INSERT ... ON DUPLICATE KEY UPDATEが特定のフィールドで機能しないことです。これには、重複をチェックするためのすべてのキーが含まれます。

4

1 に答える 1

3

テーブルに単一の複数列の一意のインデックスがある場合、更新は更新クエリで(一意のインデックスの)すべての列を使用します(使用しているようです)。

したがってUNIQUE(a,b)、例のテーブルに制約がある場合、INSERTは次のUPDATEステートメントと同等です。

UPDATE table SET c=c+1 WHERE a=1 AND b=2;

(「a = 1 OR b = 2」ではありません)

しかし、あなたの場合、最初のキーが主キーであり、サーバーから複製されることはないため、期待どおりに機能します。apiserverIDしたがって、複製できるのはあなただけです。したがって、複製が見つかった場合は、行が更新されます。それ以外の場合は、常に新しい挿入が行われます。実行される

于 2012-09-11T09:16:31.903 に答える