Lain kali, gunakan satu pernyataan "ubah tabel" untuk memperbarui kunci utama.
alter table xx drop primary key, add primary key(k1, k2, k3);
Untuk memperbaiki beberapa hal:
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;
Kunci harus menghentikan pembaruan lebih lanjut yang masuk saat Anda melakukan ini. Berapa lama waktu yang dibutuhkan jelas tergantung pada ukuran meja Anda.
Masalah utamanya adalah jika Anda memiliki beberapa duplikat dengan stempel waktu yang sama.