Chcę skopiować tabelę do MySQL. Jaki jest najszybszy sposób? Lubię to?
CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;
lub
CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);
czy jest inny sposób?
EDYCJA: Martwię się o ponowne utworzenie indeksów, w jaki sposób mysql wykonuje te instrukcje?
PS. nie może używać narzędzi wiersza poleceń, takich jak mysqldump, musi działać w locie.
Najszybszym sposobem korzystania z tabel MyISAM przy zachowaniu indeksów ) i być może innych silników pamięci masowej jest:
CREATE TABLE copy LIKE original; ALTER TABLE copy DISABLE KEYS; INSERT INTO copy SELECT * FROM original; ALTER TABLE copy ENABLE KEYS;
Chcesz wyłączyć klucze do ładowania bazy danych, a następnie ponownie utworzyć klucze na końcu.
Podobnie w przypadku InnoDB :
SET unique_checks=0; SET foreign_key_checks=0; ..insert sql code here.. SET unique_checks=1; SET foreign_key_checks=1;
(Jak wskazano w komentarzach.)
źródło
ALTER TABLE table DISABLE/ENABLE KEYS
nie działa w InnoDB i daje poniższe ostrzeżenieTable storage engine for 'table' doesn't have this option
.SET unique_checks=0; SET foreign_key_checks=0;
wstaw kod sqlSET unique_checks=1; SET foreign_key_checks=1;
Z instrukcji :
„CREATE TABLE ... SELECT nie tworzy automatycznie żadnych indeksów dla Ciebie. Jest to robione celowo, aby instrukcja była jak najbardziej elastyczna. Jeśli chcesz mieć indeksy w utworzonej tabeli, powinieneś określić je przed instrukcją SELECT:”
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Możesz określić indeksy i typy danych (aby uniknąć konwersji typów danych) w zarówno
CREATE TABLE LIKE
iCREATE TABLE SELECT
. Który z nich jest szybszy, zależy od konfiguracji.źródło
Aby skopiować z indeksami i wyzwalaczami, wykonaj następujące 2 zapytania:
CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable;
Aby skopiować tylko strukturę i dane, użyj tego:
CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
źródło
INSERT INTO
zamiastINSERT
?Czy
create table mynewtable (select * from myoldtable)
działa w mysql? Jeśli tak, to też możesz spróbować.źródło
Najlepszym sposobem na skopiowanie struktury i wszystkich wpisów z jednej tabeli do drugiej (poprzez utworzenie nowej tabeli) jest to zapytanie ...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
źródło
Spróbuj
SELECT INTO
i użyj zmiennej jako pośrednika.Najpierw musisz utworzyć tabelę odbiorczą, aby miała taką samą strukturę jak tabela źródłowa.
Najlepsze jest to, że jest wewnętrzny, więc jest szybki. Jednak stracisz swoje indeksy.
źródło
jeśli używasz MyISAM, możesz także kopiować i zmieniać nazwy poszczególnych plików. Pliki .MYD, .MYI, .FRM na zapleczu
źródło
Może mógłbyś rzucić okiem
SHOW CREATE TABLE
.Kroki do podjęcia:
Przejdź do phpmyadmin
Przejdź do SQL
Wykonaj to zapytanie
SHOW CREATE TABLE `the_old_table`;
Wynikiem jest pełna instrukcja CREATE TABLE. Edytuj zapytanie, aż będziesz zadowolony.
Zasób: http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
źródło
CREATE TABLE copy SELECT * FROM original;
Jest to szybki sposób, ale może nie najszybsza przyczyna indeksowania.
źródło