2011-03-03 16 views
0

私は2つのフィールドを持つテーブルを持っています。各フィールドの同じ値を持つ複数の行がありますが、両方の値が同じである行は1つのみです。ので、ここでは、非常に良い音しませんでした挿入または更新(キーなし)

うーんは、いくつかの例です:だから

good stuff 
a, 1 
a, 2 
b, 1 
b, 2 < ==== all are unique combinations 

bad stuff 
a, 1 
a, 1 <=== this permutation should only occur once 

、擬似コードとして:if no row exists with both columns of the give values, then UPDATE INSERT a new row (else, do nothing).

テーブルには何の鍵を持っていない(間違ったということでしょうか?)。 INSERT IF NOT EXISTSのようなコマンドが1つありますか?または、まず検索してからINSERTするかどうかを決定する必要がありますか?好適

ODBCソリューション、それが現在、MySQLだけ

答えて

1
  1. ですが、私はあなたがupsertクエリを探しているとは思わない - 鍵が見つかった場合、それは更新してしまう、それ以外の場合は、挿入します。
  2. 複数の列を主キーにすることができます。これを行うと、重複した挿入を許可しないテーブルに一意の制約が設定されます。しかし、ほとんどのデータベースでは、エラーを返すので、バッチ更新/コピーを実行している場合、更新はコミットされません。

データベース用語では、複数のフィールドを主キーにすることを複合/複合/連結キーと呼びます。

2

INSERT ... ON DUPLICATE KEY UPDATEを探している可能性があります。 (には、にテーブル内のユニークなキーがなければならないことに注意してください)

+0

キーはありません。これを機能させるには、プライマリキーまたはユニークインデックスが必要です。 @LonixSolutions、それはパフォーマンスがキーでよりよくなるので、キーを持つことは常に良いです – Rasika

関連する問題