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?
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
CREATE TABLE db1.table1 SELECT * FROM db2.table1
où db1 est la destination et db2 est la source
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é!
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.
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
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;
créer une nouvelle table en utilisant des colonnes similaires au premier
E.g. create table table2 like table1;
sélectionner tout du nouveau tableau
E.g. select * from table2;
Cliquez sur Importer et sélectionnez le fichier CSV que vous avez exporté à l'étape 2.
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
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;
Voici un autre moyen facile:
INSERT INTO DB2.TB1 SELECT * from DB1.TB1;
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
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.
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:
IN xampp suffit d’exporter la table requise en tant que fichier .sql, puis de l’importer dans le fichier requis.
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.
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.
2.INSERT INTO db2.tablename SELECT nom_colonne1, nom_colonne2 FROM nom_bable1.base;