Ответы:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
РЕДАКТИРОВАТЬ: или, если таблицы имеют разные структуры, вы также можете:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
РЕДАКТИРОВАТЬ: чтобы ограничить это ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
Если таблица не существует, вы можете создать ее с такой же схемой, например:
CREATE TABLE table2 LIKE table1;
Затем, чтобы скопировать данные:
INSERT INTO table2 SELECT * FROM table1
SELECT ... INTO
предназначена для экспорта таблицы в выходной файл или в переменные; не прямо в стол. См. Dev.mysql.com/doc/refman/5.7/en/select-into.html
Если table1 большой, и вы не хотите блокировать его на время процесса копирования, вы можете вместо этого выполнить dump-and-load:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
я не увидел запущенных запросов. Не уверен, в чем проблема.
Если вы хотите создать и скопировать контент за один раз, просто используйте SELECT:
СОЗДАТЬ ТАБЛИЦУ new_tbl SELECT * FROM orig_tbl;
Это сработало для меня. Вы можете сделать оператор SELECT более сложным с помощью предложений WHERE и LIMIT.
Сначала продублируйте большую таблицу (без данных), выполните следующий запрос, а затем обрежьте большую таблицу.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Очень просто. :-)
CREATE TABLE target_table SELECT * FROM source_table;
Он просто создает новую таблицу с той же структурой, что и исходная таблица, а также копирует все строки из source_table в target_table.
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
Если вам нужно скопировать несколько строк в target_table, примените условие внутри предложения where
Попробуй это. Хорошо работает в моем Oracle 10g,
CREATE TABLE new_table
AS (SELECT * FROM old_table);