1 votes

MySQL réunit deux tables

Situation : après un crash (ou un hack, je ne suis pas encore sûr) certains dans la table vB_users ont disparu. J'ai fait une sauvegarde de cette table, mais depuis, il y a eu de nouveaux enregistrements. Existe-t-il un moyen rapide d'ajouter toutes les lignes de la table plantée à la table de sauvegarde et de réécrire les lignes existantes ? Je veux dire, les unir, mais la version endommagée devrait avoir la priorité sur l'ancienne version.

1voto

Ryan Sampson Points 2898

Renommer la table en panne, restaurer la sauvegarde (de MARS ? ouch), renommer que d'une part, créer une nouvelle table avec l'ancien nom, puis faire quelque chose comme :

INSERT INTO vB_users SELECT * FROM crashed_table UNION SELECT * FROM restored_table;

Cela peut ne pas fonctionner tout à fait correctement dans le cas d'enregistrements qui ont le même PK mais des valeurs différentes ; vous pouvez probablement faire quelques trucs sournois pour corriger cela.

1voto

Mike Scott Points 7853

En supposant que votre table endommagée se trouve dans une base de données appelée current, que votre sauvegarde restaurée se trouve dans une base de données appelée backup et qu'il existe une clé primaire appelée id :

create table current.tempUsers as select * from backup.vB_users ub where not exists (select 1 from current.vB_Users uc where uc.id = ub.id);

insert into current.vB_users select * from current.tempUsers; 

drop table current.tempUsers;

0 votes

1054 - Colonne inconnue 'uc.id' dans 'where clause', qu'est-ce que ub et uc ?

0 votes

Ub et uc sont juste des alias pour backup.vB_users et current.vB_users pour économiser la frappe. Existe-t-il réellement une colonne "id" ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X