web-dev-qa-db-fra.com

Le vidage d'une table mysql à l'importation a remplacé les enregistrements existants

J'ai fait un vidage en utilisant mysqldump ..

mysqldump -u... -p... mydb t1 > mydb_table.sql

Ensuite, j'ai importé le vidage dans une autre base de données ayant la même table, mais des enregistrements différents ..

mysql -u...-p... mydb < mydb_tables.sql

La base de données importatrice avait des enregistrements de clé_principale 1 à 1 000 et la base de données exportatrice en avait 5 000 à 10 000.

Mais lors de l'importation, les enregistrements existants, c'est-à-dire 1 à 1 000, ont été supprimés.

Comment ?? Pourquoi ?? Si c'est un comportement par défaut, quelles options je peux donner au vidage pour ne pas le laisser se produire la prochaine fois ..

9
Rajat Singhal

Le mysqldump, par défaut, supprimera la table. Vous devez spécifier le --no-create-info option comme celle-ci:

mysqldump -u... -p... --no-create-info --skip-extended-insert mydb t1 > mydb_table.sql

De cette façon, vous n'avez que des encarts à traiter. En utilisant --skip-extended-insert insérera une ligne à la fois. Cela permet de traiter les problèmes en double, mais vous aurez l'importation comme ceci:

mysql -u...-p... --force mydb < mydb_tables.sql

Le --force L'option a pour seul but de continuer les INSERTS dans le cas où une clé en double est rencontrée. Dans ce cas, l'erreur INSERT incriminée est ignorée et transmise au INSERT suivant.

11
RolandoMySQLDBA