Verwenden Sie beim nächsten Mal eine einzelne "alter table"-Anweisung, um den Primärschlüssel zu aktualisieren.
alter table xx drop primary key, add primary key(k1, k2, k3);
Um Dinge zu reparieren:
create table fixit (user_2, user_1, type, timestamp, n, primary key( user_2, user_1, type) );
lock table fixit write, user_interactions u write, user_interactions write;
insert into fixit
select user_2, user_1, type, max(timestamp), count(*) n from user_interactions u
group by user_2, user_1, type
having n > 1;
delete u from user_interactions u, fixit
where fixit.user_2 = u.user_2
and fixit.user_1 = u.user_1
and fixit.type = u.type
and fixit.timestamp != u.timestamp;
alter table user_interactions add primary key (user_2, user_1, type );
unlock tables;
Die Sperre sollte verhindern, dass weitere Updates eingehen, während Sie dies tun. Wie lange dies dauert, hängt natürlich von der Größe Ihres Tisches ab.
Das Hauptproblem besteht darin, wenn Sie einige Duplikate mit demselben Zeitstempel haben.