0

Col1、Col2、Col3、および Col4 の 4 つの列を持つテーブルがあります。
Col1、Col2、Col3 は文字列で、Col4 は自動インクリメントの整数の主キーです。今私の要件は、Col2 と Col3 の一意の組み合わせを持つことです。

みたいに言いたい。

Insert into table(Col1, Col2, Col3) Values ('val1', 'val2', 'val3');
Insert into table(Col1, Col2, Col3) Values ('val4', 'val2', 'val3');

'val2','val3' の同じ組み合わせがテーブルに存在するため、2 番目のステートメントはエラーをスローする必要があります。しかし、自動インクリメント列が必要なため、それを主キーにすることはできません。そのためには、col4 を主キーにする必要があります。テーブルに両方を含めることができるアプローチを教えてください。

4

3 に答える 3

1

これを行うには、それらのフィールドに一意のインデックスを作成します。

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

そのドキュメントから:

UNIQUE インデックスは、インデックス内のすべての値が個別でなければならないという制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。この制約は、BDB ストレージ エンジンを除き、NULL 値には適用されません。他のエンジンの場合、UNIQUE インデックスは、NULL を含むことができる列に複数の NULL 値を許可します。UNIQUE インデックスの列にプレフィックス値を指定する場合、列の値はプレフィックス内で一意である必要があります。

于 2010-03-12T04:18:19.373 に答える
1

データベース スキーマで、2 つ以上のキーの組み合わせが一意であるという要件を設定できます。これはここにあります:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

これは、次のようなコマンドで実行できます。

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3);
于 2010-03-12T04:21:05.830 に答える
0

これらの値を挿入ロジックの一部としてチェックします。挿入する前に、次のように書いてください...

if exists
    select 1 from table
    where col2 = inputCol2 and col3 = inputCol3
then -- combo already exists
    do nothing / set error
else -- combo doesnt exist yet
    insert into table
于 2010-03-12T04:23:00.313 に答える