sql >> Database teknologi >  >> RDS >> Mysql

Opdatering af MySQL primær nøgle

Næste gang skal du bruge en enkelt "ændre tabel"-sætning til at opdatere den primære nøgle.

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

Sådan rettes ting:

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åsen bør stoppe yderligere opdateringer, mens du gør dette. Hvor lang tid det tager afhænger naturligvis af størrelsen på dit bord.

Hovedproblemet er, hvis du har nogle dubletter med det samme tidsstempel.



  1. Rails, PostgreSQL og History Triggere

  2. Sådan udføres opdateringsoperationer på kolonner af typen JSONB i Postgres 9.4

  3. Dynamisk opdateringserklæring med variable kolonnenavne

  4. Omdøb en tabel i MySQL