Réponses:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
EDIT: ou si les tables ont des structures différentes, vous pouvez également:
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
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
SELECT * INTO newTable FROM sourceTable
dans w3school , pourquoi il ne fonctionne pas dansMySQL
SELECT ... INTO
est destiné à exporter une table vers un fichier de sortie, ou vers des variables; pas directement dans une table. Voir dev.mysql.com/doc/refman/5.7/en/select-into.html
Si table1 est volumineuse et que vous ne souhaitez pas la verrouiller pendant la durée du processus de copie, vous pouvez effectuer un vidage et chargement à la place:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
, je ne pouvais voir aucune requête en cours d'exécution. Je ne sais pas quel est le problème.
Si vous souhaitez créer et copier le contenu en un seul coup, utilisez simplement le SELECT:
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
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 table plus grande.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Super simple. :-)
CREATE TABLE target_table SELECT * FROM source_table;
Il crée simplement une nouvelle table avec la même structure que celle de la table source et copie également toutes les lignes de source_table dans target_table.
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
Si vous avez besoin de copier certaines lignes dans target_table, appliquez une condition à l'intérieur de la clause where
Essaye ça. Fonctionne bien dans mon Oracle 10g,
CREATE TABLE new_table
AS (SELECT * FROM old_table);