Odpowiedzi:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
EDYCJA: lub jeśli tabele mają różne struktury, możesz również:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
EDYCJA: aby to ograniczyć ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
Jeśli tabela nie istnieje, możesz ją utworzyć z takim samym schematem:
CREATE TABLE table2 LIKE table1;
Następnie, aby skopiować dane:
INSERT INTO table2 SELECT * FROM table1
SELECT ... INTO
służy do eksportowania tabeli do pliku wyjściowego lub do zmiennych; nie bezpośrednio do stołu. Zobacz dev.mysql.com/doc/refman/5.7/en/select-into.html
Jeśli tabela1 jest duża i nie chcesz jej blokować na czas kopiowania, możesz zamiast tego wykonać zrzut i załadować:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
nie widziałem uruchomionego żadnego zapytania. Nie wiem, o co chodzi.
Jeśli chcesz stworzyć i skopiować zawartość w jednym ujęciu, po prostu użyj SELECT:
UTWÓRZ TABELĘ new_tbl SELECT * FROM orig_tbl;
To zadziałało dla mnie. Możesz uczynić instrukcję SELECT bardziej złożoną za pomocą klauzul WHERE i LIMIT.
Najpierw zduplikuj dużą tabelę (bez danych), uruchom następujące zapytanie, a następnie obetnij większą tabelę.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Super proste. :-)
CREATE TABLE target_table SELECT * FROM source_table;
Po prostu tworzy nową tabelę z taką samą strukturą jak tabela źródłowa, a także kopiuje wszystkie wiersze z tabeli źródłowej do tabeli docelowej.
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
Jeśli chcesz skopiować jakieś wiersze do target_table, zastosuj warunek wewnątrz klauzuli where
Spróbuj tego. Działa dobrze w mojej Oracle 10g,
CREATE TABLE new_table
AS (SELECT * FROM old_table);