Я счел полезным добавить индекс unqiue с помощью «ALTER IGNORE», который удаляет дубликаты и обеспечивает выполнение уникальных записей, которые звучат так, как вы хотели бы. Итак, синтаксис будет таким:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
Это эффективно добавляет уникальное ограничение, означающее, что у вас никогда не будет повторяющихся записей, а IGNORE удаляет существующие дубликаты.
Вы можете узнать больше о ALTER IGNORE здесь: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
Обновление: @Inquisitive сообщил мне, что это может не работать в версиях MySql> 5.5:
Он не работает в MySQL> 5.5 и в таблице InnoDB, а также в Percona из-за их функции быстрого создания индекса InnoDB [ http://bugs.mysql.com/bug.php?id=40344] . В этом случае сначала запустите, set session old_alter_table=1
а затем приведенная выше команда будет работать нормально
Обновление - ALTER IGNORE
удалено в 5.7
Из документов
Начиная с MySQL 5.6.17, предложение IGNORE устарело, и его использование генерирует предупреждение. IGNORE удален в MySQL 5.7.
Один из разработчиков MySQL предлагает две альтернативы :
- Сгруппируйте по уникальным полям и удалите, как показано выше
- Создайте новую таблицу, добавьте уникальный индекс, используйте
INSERT IGNORE
, например:
CREATE TABLE duplicate_row_table LIKE regular_row_table;
ALTER TABLE duplicate_row_table ADD UNIQUE INDEX (id, another_id);
INSERT IGNORE INTO duplicate_row_table SELECT * FROM regular_row_table;
DROP TABLE regular_row_table;
RENAME TABLE duplicate_row_table TO regular_row_table;
Но в зависимости от размера вашего стола это может оказаться непрактичным.