2011-12-22 15 views
1
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; 

これは、必須ではなく、一致する行全体を設定することは可能ですか? 例:列 'a'が重複している場合、更新を実行しますか?Mysql +重複キー更新

THX

答えて

6

ON DUPLICATE KEYは、挿入するデータが固有のキー要件に違反している場合は、違反の原因となったキーの組み合わせを持つ行の更新に変換します。あなたのプライマリキーがフィールドの1つだけ(例えば 'a')で、テーブルにa = 1の行がすでにある場合は、代わりに更新を取得し、元の行は 'c'セットを取得しますto = 1とb = 2の既存のレコードがある場合は、その行のCは3に変更されます(例: 'a、b')。新しいレコードが作成されます。

このテーブルに一意/プライマリキーがない場合は、アップデートを取得することはありません。追加の冗長な挿入文にすぎません。

+0

ありがとうございます - ユニークなキーがどのようにセットアップされているかを理解して更新/変更しました。 – Adam

2

行がテーブル上の制約によって決定される重複であるか否か。これは、プライマリキーだけでなく、テーブル上のすべての一意のキーとなります。したがって、a列に複数の列でないユニークなインデックスがある場合、それは機能します。

そうしないと、おそらくトリガーでそれを達成できます。

関連する問題