web-dev-qa-db-fra.com

Le moyen le plus simple de copier une table d'une base de données à une autre?

Quelle est la meilleure méthode pour copier les données d'une table d'une base de données vers une table d'une autre base de données lorsque les bases de données appartiennent à des utilisateurs différents?

Je sais que je peux utiliser

INSERT INTO database2.table2 SELECT * from database1.table1

Mais ici le problème est que database1 et database2 sont sous différents utilisateurs de MySQL. Ainsi, user1 ne peut accéder qu'à database1 et user2 ne peut accéder qu'à database2. Une idée?

130
Sparky

Si vous avez un accès Shell, vous pouvez utiliser mysqldump pour vider le contenu de database1.table1 et le diriger vers mysql vers database2. Le problème ici est que table1 est toujours table1.

mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2

Peut-être devrez-vous renommer table1 en table2 avec une autre requête. D'autre part, vous pouvez utiliser sed pour changer de table en table2 entre les tuyaux to.

mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

Si la table2 existe déjà, vous pouvez ajouter les paramètres au premier mysqldump qui ne permettent pas de créer la table-crée.

mysqldump --no-create-info --no-create-db --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
97
helmor

CREATE TABLE db1.table1 SELECT * FROM db2.table1

où db1 est la destination et db2 est la source

87
mainmeat

Si vous utilisez PHPMyAdmin, cela pourrait être très simple. Supposons que vous ayez les bases de données suivantes:

DB1 & DB2

Les utilisateurs de la table DB1 que vous souhaitez copier dans DB2

Sous PHPMyAdmin, ouvrez DB1, puis accédez à la table users.

Sur cette page, cliquez sur l'onglet "Opérations" en haut à droite. Sous Opérations, recherchez la section Copier le tableau dans (database.table):

& vous avez terminé!

49
Mekey Salaria

MySql Workbench: Fortement recommandé

Database Migration Tool From MySql Workbench

Cela résoudra facilement les problèmes de migration. Vous pouvez migrer des tables sélectionnées de bases de données sélectionnées entre MySql et SqlServer. Vous devriez essayer définitivement.

23
mmdemirbas

J'utilise Navicat pour MySQL ...

Cela facilite toutes les manipulations de bases de données!

Il vous suffit de sélectionner les deux bases de données dans Navicat, puis de les utiliser.

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1
18
Nick M

Utilisez les fonctionnalités d'exportation et d'importation de MySql Workbench. Pas:
1. Sélectionnez les valeurs que vous voulez

E.g. select * from table1; 
  1. Cliquez sur le bouton Exporter et enregistrez-le au format CSV.
  2. créer une nouvelle table en utilisant des colonnes similaires au premier

    E.g. create table table2 like table1; 
    
  3. sélectionner tout du nouveau tableau

    E.g. select * from table2;  
    
  4. Cliquez sur Importer et sélectionnez le fichier CSV que vous avez exporté à l'étape 2.

Sample of the Export and Import buttons in MySql Workbench

9
biniam

Je sais que c'est une vieille question, il suffit de répondre pour que toute personne qui atterrit ici ait une meilleure approche.

À partir de 5.6.10 vous pouvez faire

CREATE TABLE new_tbl LIKE orig_tbl;

Reportez-vous à la documentation ici: https://dev.mysql.com/doc/refman/5.7/fr/create-table-like.html

9
Mir

Si vos tables sont sur le même serveur mysql, vous pouvez exécuter les commandes suivantes

CREATE TABLE destination_db.my_table SELECT * FROM source_db.my_table;
ALTER TABLE destination_db.my_table ADD PRIMARY KEY (id); 
ALTER TABLE destination_db.my_table MODIFY COLUMN id INT AUTO_INCREMENT;
7
Weston Ganger

Voici un autre moyen facile:

  1. utilisez DB1; affichez la table de création TB1;
    • copier la syntaxe ici dans le presse-papier pour créer TB1 dans DB2
  2. utilisez DB2;
    • collez la syntaxe ici pour créer la table TB1

INSERT INTO DB2.TB1 SELECT * from DB1.TB1;

7
MojganK

Essayez mysqldbcopy ( documentation )

Ou vous pouvez créer un " table fédérée " sur votre hôte cible. Les tables fédérées vous permettent de voir une table à partir d'un serveur de base de données différent comme s'il s'agissait d'un serveur local. ( documentation )

Après avoir créé la table fédérée, vous pouvez copier des données avec le insert into TARGET select * from SOURCE

4
Aaron Digulla

Avec MySQL Workbench, vous pouvez utiliser Data Export pour exporter uniquement la table dans un fichier SQL local (Data Only, Structure Only ou Structure et Data), puis Importer des données pour le charger dans l'autre base de données.

Vous pouvez avoir plusieurs connexions (hôtes différents, bases de données, utilisateurs) ouvertes en même temps.

4
Doug Krugman

Un moyen simple d'obtenir toutes les requêtes dont vous avez besoin consiste à utiliser les données de information_schema et concat.

SELECT concat('CREATE TABLE new_db.', TABLE_NAME, ' LIKE old_db.', TABLE_NAME, ';') FROM `TABLES` WHERE TABLE_SCHEMA = 'old_db';

Vous obtiendrez alors une liste de résultats ressemblant à ceci:

CREATE TABLE new_db.articles LIKE old_db.articles;
CREATE TABLE new_db.categories LIKE old_db.categories;
CREATE TABLE new_db.users LIKE old_db.users;
...

Vous pouvez alors simplement exécuter ces requêtes.

Cependant, cela ne fonctionnera pas avec MySQL Views. Vous pouvez les éviter en ajoutant AND TABLE_TYPE = 'BASE TABLE' à partir de la requête initiale:

1
John Mellor

IN xampp suffit d’exporter la table requise en tant que fichier .sql, puis de l’importer dans le fichier requis.

1
Sameera Sampath

Est-ce quelque chose que vous devez faire régulièrement ou juste un moment?

Vous pouvez faire une exportation (par exemple en utilisant phpMyAdmin ou similaire) qui scriptera votre table et son contenu dans un fichier texte, puis vous pourrez le réimporter dans l'autre base de données.

1
Sepster

utilisez les étapes ci-dessous pour copier et insérer des colonnes d'une table de base de données dans une autre table de base de données.

  1. CREATE TABLE nom_table (type de données nom de colonne (taille), type de données nom de colonne (taille));

2.INSERT INTO db2.tablename SELECT nom_colonne1, nom_colonne2 FROM nom_bable1.base;

1
Vishnu More