2012-03-16 14 views
4

CustID(一意ではない)、ProdID(一意でない)およびPriceのフィールドを持つ3列(すべて数値)の表があります。唯一の「一意性」は、CustID/ProdIDペアが複製されないことです。だから、すべてのクライアントはすべての製品に異なる '価格'を持っています。私は3行の方法を使用しています。 (a)ペアが存在するかどうかの検索、(b)価格が更新されている場合、(c)新しいペアを価格とともに挿入しない場合は、MySql Updateフィールドまたは挿入されていない場合は、プライマリキーなし

誰でもREPLACE命令を使用する方法を提案できますが、ほとんどのINSERT/ON DUPEの例は、主キーが必要であることを暗示しているようです。私は通常、常にpkを持っていますが、この要件のために無駄に見えました。私を助ける時間を持つ人に多くのおかげです。 Ken Ashton

申し訳ありませんが、マイケルはすでに私に例を与えていました。私は今投票を考えます。多くのありがとうございます。

+1

実際には、パフォーマンス目的ではなく、完全性を維持するために、「CustID/ProdID」に一意のインデックスを作成する必要があります。 –

+1

'CREATE INDEX idx_unique_custprod on tblname(CustID、ProdID)' –

+3

また、PKとして作成する方がいいでしょう。 –

答えて

3

マイケルとトニーが示唆しているように、PKは決して浪費されません。ですから、すべてのテーブルにPKを置くことは常に良い考えです。ですからまず、PKを作成してINSERT ON DUPLICATE KEYを使用することをお勧めします。

PKを使用しない場合は、まずDELETEを実行してからINSERTを実行します。実際には、それは内部的にREPLACEが行うものです。

+0

ありがとう。私は初心者ですが、参照整合性の必要性に感謝しましたが、これはあまりにも簡単すぎると思っただけですが、あなたは私の重要性を強化しました。 2つのnon.unique idフィールドを1つのユニークなフィールドに組み合わせる例を教えてください。これまでにこれまでに行ったことはありません。INSERT ON DUPLICATEコマンドでどのように使用されるかを示しています。多くのありがとう – KenAshton

+1

は、共通の一意のフィールドを作成するために、これは動作する必要があります - 'ALTER TABLE tableName ADDユニークインデックスidxName(CustID、ProdID);' – Abhay

関連する問題