sql >> Base de Datos >  >> RDS >> Mysql

Actualización de la clave principal de MySQL

La próxima vez, use una sola instrucción "alterar tabla" para actualizar la clave principal.

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

Para arreglar las cosas:

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;

El bloqueo debería evitar que entren más actualizaciones mientras haces esto. El tiempo que tarde esto obviamente depende del tamaño de tu mesa.

El principal problema es si tienes algunos duplicados con la misma marca de tiempo.