Как добавить уникальный индекс в Mysql, удалив дублирующиеся данные
Коротко
Все относительно просто. Сперва разберемся с дубликатами.
Допустим мы хотим удалить все записи из таблицы users
с одинаковым login.
Находим все записи с одинаковым id и удаляем те, у которых id меньше:
DELETE t1 FROM users t1, users t2 WHERE
t1.login = t2.login
AND t1.id < t2.id;
Если мы хотим добавить составной уникальный ключ, например first_name + last_name, то для удаления таких дубликатов просто добавим дополнительное условие:
DELETE t1 FROM users t1, users t2 WHERE
t1.first_name = t2.first_name
AND t1.last_name = t2.last_name
AND t1.id < t2.id;
При большем количестве полей составного ключа просто добавляем условия. И далее добавляем ключ:
-- Для одного столбца
ALTER TABLE users ADD UNIQUE login_unique (login);
-- Или составной
ALTER TABLE users ADD UNIQUE fn_name_unique (first_name, last_name);
Дополнительно
Рекомендую всегда добавлять имя ключу, чтобы избежать дублирования индексов, в случае если запрос выполнится 2 раза.