sql >> Database >  >> RDS >> Mysql

De primaire sleutel van MySQL bijwerken

Gebruik de volgende keer een enkele "alter table"-instructie om de primaire sleutel bij te werken.

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

Om dingen op te lossen:

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;

Het slot zou moeten voorkomen dat verdere updates binnenkomen terwijl u dit doet. Hoe lang dit duurt, hangt natuurlijk af van de grootte van je tafel.

Het grootste probleem is als u enkele duplicaten heeft met dezelfde tijdstempel.



  1. MySQL-python installeren

  2. MySQL omzeilen Kan tabelfout niet heropenen

  3. Hoe zie ik welke tekenset een MySQL-database / tabel / kolom is?

  4. MySQL-fout:mysql_fetch_assoc() verwacht dat parameter 1 resource is