Ответ 1
Это немедленно копирует структуру таблицы, но не данные:
CREATE TABLE copy LIKE original;
Это создает все индексы таблицы original
.
Он работает таким образом в mysql 5.1.39
.
Я хочу скопировать таблицу в 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);
или есть другой способ?
EDIT: меня беспокоит повторное создание индексов, как mysql продолжает выполнение этих утверждений?
PS. не могут использовать инструменты командной строки, такие как mysqldump, должны быть на лету.
Это немедленно копирует структуру таблицы, но не данные:
CREATE TABLE copy LIKE original;
Это создает все индексы таблицы original
.
Он работает таким образом в mysql 5.1.39
.
Самый быстрый способ использования таблиц 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;
(Как указано в комментариях.)
Из руководства :
"CREATE TABLE... SELECT автоматически не создает для вас никаких индексов. Это делается намеренно, чтобы сделать оператор максимально гибким. Если вы хотите иметь индексы в созданной таблице, вы должны указать их перед SELECT утверждение:"
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Вы можете указать индексы и типы данных (чтобы избежать преобразования типов данных) с помощью как CREATE TABLE LIKE
, так и CREATE TABLE SELECT
. Какой из них быстрее будет зависеть от вашей настройки.
Работает ли create table mynewtable (select * from myoldtable)
в mysql? Если это так, вы можете попробовать.
Лучший способ скопировать структуру и все записи из одной таблицы в другую таблицу (путем создания новой таблицы) - это этот запрос...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
Чтобы скопировать с помощью индексов и триггеров, выполните следующие 2 запроса:
CREATE TABLE newtable LIKE oldtable;
INSERT newtable SELECT * FROM oldtable;
Чтобы скопировать только структуру и данные, используйте следующую команду:
CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
Попробуйте SELECT INTO
и используйте variable как промежуточный.
Вам придется создать таблицу приема, во-первых, иметь ту же структуру, что и исходная таблица.
Лучше всего, это внутреннее, так что это быстро. Однако вы потеряете свои индексы.
если вы используете MyISAM, вы также можете копировать и переименовывать файлы induvidual. .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;
Это быстрый способ, но, возможно, не самая быстрая причина индексов.