web-dev-qa-db-fra.com

Dans MySQL, comment copier le contenu d'une table dans une autre table de la même base de données?

Je suis nouveau sur MySQL. Je voudrais copier le contenu d'une table dans une autre table de la même base de données. Fondamentalement, je voudrais insérer dans une table d'une autre table. Y a-t-il un moyen facile de faire cela?

108
Joneph O.

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

EDIT: ou si les tables ont des structures différentes, vous pouvez aussi:

INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;

EDIT: pour contraindre cela ..

INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
172
ggiroux

Si la table n'existe pas, vous pouvez en créer une avec le même schéma, comme ceci:

CREATE TABLE table2 LIKE table1;

Ensuite, pour copier les données sur:

INSERT INTO table2 SELECT * FROM table1
129
GSto

Si la table 1 est volumineuse et que vous ne souhaitez pas la verrouiller pendant le processus de copie, vous pouvez effectuer un dump-and-load à la place:

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
27
Ike Walker

Si vous voulez créer et copier le contenu en un seul coup, utilisez simplement le bouton SELECT:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

9
Frank Heikens

Cela a fonctionné pour moi

CREATE TABLE newtable LIKE oldtable;

Réplique newtable avec l'ancienne table

INSERT newtable SELECT * FROM oldtable;

Copie toutes les données de ligne dans la nouvelle table.

Merci

9
Jason

Cela a fonctionné pour moi. Vous pouvez rendre l'instruction SELECT plus complexe avec les clauses WHERE et LIMIT.

Commencez par dupliquer votre grande table (sans les données), exécutez la requête suivante, puis tronquez la plus grande table.

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

Super simple. :-)

0
Sandor Fekete