web-dev-qa-db-fra.com

comment ignorer les enregistrements en double lors de l'importation dans phpmyadmin

J'ai une base de données sur ma machine locale et je souhaite importer les données dans la base de données de mon hébergement. Les deux bases de données sont identiques, les mêmes table names, column names, etc.

Lorsque je export la table de ma base de données locale via phpmyadmin et import via phpmyadmin sur mon hébergement, une erreur apparaît me disant qu'il y a des entrées en double pour la primary key et arrête toute l'opération.

Comment puis-je importer les données via phpmyadmin, ignorer les entrées en double et afficher une liste des doublons à la fin du processus?

Une solution que je peux faire est d'appeler toutes les valeurs de la clé primaire dans la base de données sur mon hébergement et de filtrer les doublons avant l'importation. MAIS je me demande s'il y a une solution rapide pour cela avec phpmyadmin?

18
Jo E.

Dans phpMyAdmin, dans l'onglet Paramètres, vous pouvez essayer de vérifier les valeurs suivantes:

  • Paramètres -> Requêtes SQL -> Ignorer les erreurs d'instructions multiples

Si vous utilisez le format CSV:

  • Paramètres -> Importer -> CSV -> Ne pas abandonner en cas d'erreur INSERT

Si vous utilisez le format SQL:

  • Paramètres -> Exporter -> SQL -> Utiliser ignorer les insertions
38
nl-x

Il y a deux façons de faire ce que vous voulez:

La manière brutale:

TRUNCATE TABLE yourTbl; -- emtpies out the table

Ensuite, importez, mais vous risquez de perdre des données, alors créez peut-être une table de sauvegarde. Tout bien considéré, ne faites pas cela, vérifiez les alternatives énumérées ci-dessous:

Écrivez votre propre requête INSERT, avec la clause IGNORE:

INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate

Mais, puisque vous importez un fichier, la requête sera très probablement un LOAD DATA [LOCAL] INFILE. Comme vous pouvez le voir dans le manuel , vous pouvez aussi facilement ajouter un IGNORE à cette requête:

LOAD DATA LOCAL INFILE '/path/to/files/filename1.csv' IGNORE -- IGNORE goes here
    INTO TABLE your_db.your_tbl
        FIELDS TERMINATED BY ';'
               OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
    (`field1`,`field2`);

C'est ça. Ne vous inquiétez pas si vous n'êtes pas trop à l'aise pour écrire vos propres requêtes comme ceci, il existe d'autres façons de faire ce que vous voulez faire:
La manière CLI:

mysqlimport -i dbname fileToImport
# Or
mysqlimport --ignore dbname fileToImport

CLI également, créez un fichier contenant le LOAD DATA requête ci-dessus, puis:

$: mysql -u root -p
*********** #enter password
mysql> source /path/to/queryFile.sql

Cela vous oblige à avoir accès à la ligne de commande, et à exécuter cette commande Voici la page de manuel de MySQL

En utilisant phpMyAdmin, lors de l'importation, vous trouverez une case à cocher indiquant "Ignorer les doublons" , vérifiez cela et importez. Voici une page avec des captures d'écran
Vous pouvez également choisir de cocher "Ignorer les erreurs" , mais c'est une autre approche par force brute, et je ne le recommanderais pas.

7
Elias Van Ootegem