2012-01-06 3 views
4

У меня есть таблица с идентификатором auto_inc (первичный ключ). Я стараюсь избегать вставки повторяющихся строк.Избегайте вставки повторяющихся строк в mySQL

Пример дубликата строки:

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

Ключ (ID) не дублировать, так как он автоматически генерируется MySql, но все остальные поля идентичны.

ответ

7

Сделать уникальный индекс по полям a, b, c.

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

но поля не являются уникальными, например, это прекрасно, чтобы иметь поле а = 6 много раз, что не разрешено это сочетание тех же значений а, Ь, с –

+1

То есть именно то, что это делает ;-) Его комбинированный ключ, а не три отдельных ключа. – Lennart

+0

о, отлично. Спасибо! –

6

Вы должны использовать ON DUPLICATE KEY UPDATE и объявить поля как уникальный.

Если вы указываете ON KEY UPDATE DUPLICATE, и вставляется строка, что может вызвать повторяющееся значение в уникальный индекс или первичный ключ, UPDATE старой строки выполняется.

+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

Сделайте три столбца сложным ключом.

+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' 
    ); 
Смежные вопросы