sql >> Databáze >  >> RDS >> Mysql

Aktualizace primárního klíče MySQL

Příště použijte k aktualizaci primárního klíče jeden příkaz „alter table“.

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

Chcete-li věci opravit:

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;

Zámek by měl zastavit další příchozí aktualizace, když to děláte. Jak dlouho to bude trvat, samozřejmě závisí na velikosti vašeho stolu.

Hlavním problémem je, pokud máte nějaké duplikáty se stejným časovým razítkem.



  1. Načtení PDO nic nevrací

  2. Jednoduchý poddotaz s OuterRef

  3. duplikáty mysql GROUP_CONCAT

  4. Jak používat GROUP BY v dotazu při použití proměnných