2012-01-06 43 views
4

私はauto_inc id(主キー)を持つテーブルを持っています。 重複する行の挿入を回避しようとしています。重複行のmySQLに重複行を挿入するのを避ける

例:それは自動的にMySQLが生成されるため

id | field a | field b | field c | 
1  4   6   7 
2  4   6   7 

キー(ID)が重複していないが、他のすべてのフィールドは同一です。

答えて

7

フィールドa、b、cにユニークなインデックスを作成します。

ALTER TABLE `table` ADD UNIQUE (
`a` , 
`b` , 
`c` 
); 
+0

が、フィールドは一意ではありません、例えば、それはフィールドA = 6何回も持って結構です、何を許可されていないことは、これはまったく同じものです、B、C –

+1

に同じ値の組み合わせであります;-)それは3つの別個の鍵ではなく、組み合わされた鍵です。 – Lennart

+0

ああ、素晴らしい。ありがとうございました! –

6

ON DUPLICATE KEY UPDATEを使用し、フィールドを一意とする必要があります。

あなたはDUPLICATE KEY UPDATE ON指定して、行が は古い行の UPDATEが実行され、UNIQUEインデックスまたはPRIMARY KEYで重複する値を引き起こすことに挿入されている場合。

+0

フィールドは一意ではありません。たとえば、フィールドa = 6を何度も使用することはできますが、許容されないのはa、b、cの同じ値の組み合わせです –

+2

複合ユニークインデックスを作成する必要があります。http: /stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-for-multiple-columns-in-mysql – aleroot

+0

ありがとうございました! –

-1

3つの列を複合キーにします。

+0

「行」ではなく**列**と言っていましたか? –

2

これも使用できます。

INSERT INTO `tableName` (`field1`, `field2`,`field3`) 
SELECT `field1`, `field2`,`field3` FROM `tableName` 
WHERE NOT EXISTS (SELECT 1 
    FROM `tableName` 
    WHERE 
    `field1` = 'value' AND `field2` = 'value' AND `field3` = 'value' 
    ); 
関連する問題