CREATE TABLE roles_users2 LIKE roles_users; -- this ensures indexes are preserved
INSERT INTO roles_users2 SELECT DISTINCT * FROM roles_users;
DROP TABLE roles_users;
RENAME TABLE roles_users2 TO roles_users;
и на будущее, чтобы предотвратить дублирование строк
ALTER TABLE roles_users ADD UNIQUE INDEX (role_id, user_id);
Или вы можете сделать все это за один шаг с помощью ALTER TABLE IGNORE
:
ALTER IGNORE TABLE roles_users ADD UNIQUE INDEX (role_id, user_id);
IGNORE - это расширение MySQL для стандартного SQL.Он управляет работой ALTER TABLE, если в новой таблице присутствуют дубликаты уникальных ключей или появляются предупреждения при включенном строгом режиме.Если IGNORE не указан, копия прерывается и откатывается при возникновении ошибок дубликата ключа.Если указан IGNORE, используется только первая строка из строк с дубликатами на уникальном ключе.Другие конфликтующие строки удаляются.Неверные значения усекаются до ближайшего подходящего допустимого значения.