2010-02-26 5 views
88

Я новичок в MySQL. Я хотел бы скопировать содержимое одной таблицы в другую таблицу в той же базе данных. В принципе, я хотел бы вставить в таблицу из другой таблицы. Есть ли простой способ сделать это?В MySQL, как скопировать содержимое одной таблицы в другую таблицу в одной базе данных?

ответ

150

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

EDIT: или если таблицы имеют различные структуры вы также можете:

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

EDIT: чтобы ограничить это ..

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

вау ... это просто –

+7

@JonephO .: Вы должны отметить этот ответ, как принято! ggiroux: Спасибо, это здорово, это действительно просто. – Sk8erPeter

+0

Что произойдет, если кто-то захочет выполнить операции вставки в исходной таблице во время выполнения этого запроса? он блокирует операцию вставки или нет? –

97

Если таблица не существует , вы можете создать его с такой же схемой:

CREATE TABLE table2 LIKE table1; 

Затем, чтобы скопировать данные по:

INSERT INTO table2 SELECT * FROM table1 
+0

+1 для создания LIKE tip :) –

+1

выдающийся! 7 лет программирования, и я никогда не знал об этом !!! –

+1

Я нашел этот код 'SELECT * INTO newTable FROM sourceTable' в [w3school] (http: //www.w3schools.com/sql/sql_select_into.asp), почему он не работает в 'MySQL' –

25

Если table1 велика, и вы не хотите, чтобы зафиксировать ее на время процесса копирования, вы можете сделать дамп-и-нагрузки вместо того, чтобы:

CREATE TABLE table2 LIKE table1; 

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1; 
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2; 
+1

+1 для outfile shenanigans – Martin

9

Если вы хотите создать и скопировать содержимое в одном кадре, просто используйте SELECT:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

+3

+1 - хотя новая таблица не будет иметь определения индекса от первого. Подход «create ... like ...» также скопирует определения индекса. – Martin

+1

@FrankHeikens это тоже работает в MySQL? –

-4

Попробуйте это. Хорошо работает в моем Oracle 10g,

CREATE TABLE new_table 
    AS (SELECT * FROM old_table); 
+8

Но вопрос только в MySQL. –

+0

Он дал + для этого, потому что он также работает с MySQL. http://dev.mysql.com/doc/refman/5.7/en/create-table-select.html – Daniel

0

Это сработало для меня. Вы можете сделать оператор SELECT более сложным, с предложениями WHERE и LIMIT.

Сначала дублируйте свою большую таблицу (без данных), запустите следующий запрос, а затем обрезайте большую таблицу.

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

Супер простой. :-)

2

Это работает для меня,

CREATE TABLE newtable LIKE oldtable;

Репликация Новая_таблица со старым столом

INSERT newtable SELECT * FROM oldtable;

Копирует все данные строки в новую таблицу.

Спасибо

Смежные вопросы