Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour de la clé primaire MySQL

La prochaine fois, utilisez une seule instruction "alter table" pour mettre à jour la clé primaire.

alter table xx drop primary key, add primary key(k1, k2, k3);

Pour arranger les choses :

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;

Le verrou devrait empêcher d'autres mises à jour d'arriver pendant que vous faites cela. Le temps que cela prend dépend évidemment de la taille de votre table.

Le principal problème est si vous avez des doublons avec le même horodatage.