Мені здалося корисним додати індекс unqiue, використовуючи "ALTER IGNORE", який видаляє дублікати та застосовує унікальні записи, які звучать так, як ви хотіли б зробити. Отже, синтаксис був би:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
Це ефективно додає унікальне обмеження, тобто у вас ніколи не буде повторюваних записів, і IGNORE видаляє існуючі дублікати.
Ви можете прочитати більше про eh 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;
Але залежно від розміру вашого столу це може бути не практично