Я хочу скопировать таблицу в MySQL. Какой способ самый быстрый? Как это?
CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;
или же
CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);
или есть другой способ?
РЕДАКТИРОВАТЬ: меня беспокоит воссоздание индексов, как mysql выполняет эти инструкции?
PS. не могут использовать инструменты командной строки, такие как mysqldump, должны работать «на лету».
Самый быстрый способ использования таблиц MyISAM при сохранении индексов ) и, возможно, других механизмов хранения:
CREATE TABLE copy LIKE original; ALTER TABLE copy DISABLE KEYS; INSERT INTO copy SELECT * FROM original; ALTER TABLE copy ENABLE KEYS;
Вы хотите отключить ключи для загрузки базы данных, а затем воссоздать ключи в конце.
Аналогично для InnoDB :
SET unique_checks=0; SET foreign_key_checks=0; ..insert sql code here.. SET unique_checks=1; SET foreign_key_checks=1;
(Как указано в комментариях.)
источник
ALTER TABLE table DISABLE/ENABLE KEYS
не работает в InnoDB и дает предупреждение нижеTable storage engine for 'table' doesn't have this option
.SET unique_checks=0; SET foreign_key_checks=0;
здесь код sqlSET unique_checks=1; SET foreign_key_checks=1;
Из руководства :
«CREATE TABLE ... SELECT не создает для вас автоматически никаких индексов. Это сделано намеренно, чтобы сделать оператор максимально гибким. Если вы хотите иметь индексы в созданной таблице, вы должны указать их перед оператором SELECT:»
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Вы можете указать индексы и типы данных (чтобы избежать преобразования типов данных) в обоих
CREATE TABLE LIKE
иCREATE TABLE SELECT
. Какой из них быстрее, будет зависеть от вашей настройки.источник
Для копирования с индексами и триггерами выполните эти 2 запроса:
CREATE TABLE newtable LIKE oldtable; INSERT newtable SELECT * FROM oldtable;
Чтобы скопировать только структуру и данные, используйте это:
CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
источник
INSERT INTO
вместоINSERT
?Работает ли
create table mynewtable (select * from myoldtable)
в MySQL? Если да, вы тоже можете попробовать.источник
Лучший способ скопировать структуру и все записи из одной таблицы в другую (создав новую таблицу) - это запрос ...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
источник
Попробуйте
SELECT INTO
использовать переменную как посредник.Сначала вам нужно создать принимающую таблицу, которая должна иметь ту же структуру, что и исходная таблица.
Лучше всего то, что он внутренний, поэтому он быстрый. Однако вы потеряете свои индексы.
источник
если вы используете MyISAM, вы также можете копировать и переименовывать индивидуальные файлы. Файлы .MYD, .MYI, .FRM в серверной части
источник
Может ты мог бы взглянуть на
SHOW CREATE TABLE
.Что нужно сделать:
Зайдите в phpmyadmin
Перейти к SQL
Выполнить этот запрос
SHOW CREATE TABLE `the_old_table`;
Результатом является полный оператор CREATE TABLE. Отредактируйте запрос, пока не будете довольны.
Ресурс: http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
источник
CREATE TABLE copy SELECT * FROM original;
Это быстрый способ, но, возможно, не самая быстрая причина появления индексов.
источник