Atacul clonelor. Mysql remove duplicates.

Ok, presupunem o tabela cu urmatoarele campuri : id, event_date, user_id, client_id , tip, observatii. Acesta tabela este folosita si de un webservice. Care din cand in cand o ia razna (pe legaturi proste) si baga in ea duplicate. Presupunem ca tabela se numeste events. Hai sa vedem cum scapam de duplicate. E clar ca id-ul nu poate fi folosit (e unic, e cheie primara, are autoincrement, deci select distinct * from events nu ne va ajuta deloc). Pai si ce facem, vom zice ?

Pai creem o tabela temporara cu inregistrarile duplicate (fara a lua in considerare ID-ul) . Stergem tabela initiala si apoi recopiem din tabela temporara in tabela initiala:

CREATE TEMPORARY TABLE temp AS SELECT DISTINCT event_date, user_id, client_id , tip, observatii FROM events;
DELETE FROM events;
INSERT INTO events (event_date, user_id, client_id , tip, observatii) SELECT * from temp;

Nu e chiar asa de greu, nu-i asa ?

CREATE TABLE events_copy
SELECT * FROM events;

Si faceti un backup inainte de operatie. Aveti oricum un backup de acum 1 ora, nu-i asa ? NU ? Rau faceti.

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.