Est-il possible d'ajouter les colonnes (structure et contenu) d'une table MySQL à un autre?
-
27-10-2019 - |
Question
Je voudrais copier la structure et le contenu d'une table MySQL à un autre, en ajoutant toutes les colonnes et les valeurs de cette table à ceux qui existent déjà dans l'autre table.
je pouvais le faire manuellement, mais depuis que je parle d'une grande quantité de colonnes, ce serait bien s'il y avait une sorte de déclaration ALTER me aider le faire.
EDIT:
Pour me expliquer mieux:
J'ai d'abord besoin d'ajouter les colonnes contenues dans le tableau B (nom_colonne, data_type) au tableau A (qui a déjà son propre ensemble de colonnes). Une fois cela fait, je peux copier le contenu, ce qui est facile.
Je suppose que la vraie question est: est-il possible d'ajouter les colonnes contenues dans le tableau B à une autre table (tableau A) qui comporte des colonnes de son propre
?La solution
misera sur la deuxième solution de flavianatill, il me semble que l'exportation / étape d'importation n'est pas nécessaire. Si je comprends bien le problème, celui-liner suivant devrait le faire.
CREATE TABLE IF NOT EXISTS merged_table AS (SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id);
Désolé, je l'aurais mis cela dans un commentaire, mais je manque la réputation!
Autres conseils
Cette copie toutes les données à partir d'une table source à une table cible. Vous pouvez spécifier les colonnes qui doivent aller. en changeant les noms des targetColumn .. et sourceColumn ....
INSERT INTO targetTable (
targetColumn1
targetColumn1
targetColumn1
....
targetColumnN
)
SELECT
sourceColumn1
sourceColumn1
sourceColumn1
....
sourceColumnN
FROM sourceTable
Vous pouvez également créer SourceTable en faisant
CREATE TABLE targetTable LIKE sourceTable
EDIT Une méthode pour tirer toutes les données de SourceTable à targettable, mais la suppression targettable si elle existe
DROP TABLE IF EXISTS targetTable;
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
EDIT Si vous avez besoin de garder les anciennes données, vous devrez peut-être, mais vous remapper pouvez fusionner dans d'autres tables
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
INSERT INTO targetTable ( fieldsToInsertTo ) SELECT fieldsToSelectFrom FROM oldTargetTable ON DUPLICATE KEY ......;
DROP TABLE IF EXISTS oldTargetTable;
RENAME TABLE targetTable TO oldTargetTable;
Cela cependant potentiellement soit besoin Duplicate KEY UPDATE ..... logique, ou simplement INSERT IGNORE sur la seconde si vous êtes heureux de jeter une clé primaire / UNIQUE lignes en conflit. Cela suppose que vous avez SourceTable que vous souhaitez copier et de fusionner avec les données de oldTargetTable. Le tableau targettable est juste un nom temporaire.
Si vous voulez préférer les données de l'ancienne table puis juste échanger l'ordre que vous effectuez les INSERTs bien sûr