СУБД MySQL. Как удалить дубли.
UPD: Как верно напомнено в комментариях, способ работает в случае использования движка MyISAM. Для InnoDB запрос будет выглядеть чуть по другому, чуть позже напишу.
Задача довольно тривиальна, но зачастую новичкам (да и корифеям на ранней стадии склероза 🙂 ) её решение не очевидно. Итак, удаляем дублирующиеся строки в базе MySQL.
Например :
Id Name Age
1 Igor 26
2 Ivan 24
3 Igor 26
4 Vadim 31
Id 1 и 3 — один и тот же человек, одну запись надо удалить. Делаем так:
ALTER IGNORE TABLE tbl_ges ADD UNIQUE INDEX(Name,Surname);
Имеем таблицу с одной записью про Igor 26.
phpmyadmin выдает ошибку
#1062 — Duplicate entry ‘***’ for key ‘field_name’
Какая версия MySQL?
Сервер: Localhost via UNIX socket
Тип сервера: MySQL
Версия сервера: 5.5.43-0ubuntu0.14.04.1 — (Ubuntu)
Версия протокола: 10
Кодировка сервера: UTF-8 Unicode (utf8)
Кусок табличкиhttp://somehost.ru/finder/tires/?tire_width=7.5 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=30 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=31 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=32 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=33 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=35 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=37 | 0 | 1 |http://somehost.ru/finder/tires/?tire_width=120 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=135 | 1 | 1 |http://somehost.ru/finder/tires/?tire_width=140 | 1 | 1 |
+—-+——————————————————+——-+———+
| id | link | allow | checked |
+—-+——————————————————+——-+———+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+—-+——————————————————+——-+———+
И сам запрос ALTER IGNORE TABLE links ADD UNIQUE INDEX(link);
И, да… Неплохо бы запрос целиком, ответ целиком и кусочек таблицы.
Кстати чуть позже на другом сайт прочитал, что таблица должна быть в MyISAM, в итоге послал такой запрос и все получилось
ALTER TABLE
links
ENGINE MyISAM;ALTER IGNORE TABLE
links
ADD UNIQUE INDEXduplex
(link
);ALTER TABLE
links
DROP INDEXduplex
;ALTER TABLE
links
ENGINE InnoDB;Спасибо за уточнение, про InnoDB не думал, когда заметку писал.