sql >> Databasteknik >  >> RDS >> Mysql

Uppdaterar MySQL primärnyckel

Nästa gång, använd en enda "alter table"-sats för att uppdatera primärnyckeln.

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

Så här fixar du saker:

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;

Låset bör stoppa ytterligare uppdateringar när du gör detta. Hur lång tid det tar beror självklart på storleken på ditt bord.

Det största problemet är om du har några dubbletter med samma tidsstämpel.



  1. Hur man hittar namnet på en begränsning i MySQL

  2. Escape Character i SQL Server

  3. Kan någon rekommendera en bra handledning om MySQL-index, speciellt när den används i en order by-klausul under en join?

  4. Vad är databasbegränsningar?