Cкопировать таблицу с данными (MySQL)

В MySQL, есть возможность, быстро создать новую таблицу на основе существующей и перенести все данные этой таблицы.

Например у нас есть таблица auto.

CREATE TABLE `auto` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` CHAR(50) NOT NULL, `country` CHAR(50) NOT NULL, `site` CHAR(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `name` (`name`), INDEX `country` (`country`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB;

Как видно из CREATE-запроса, в таблице есть 3 индекса: PRIMARY KEY id, UNIQUE INDEX name, INDEX country.

Записи таблицы:

INSERT INTO `auto` (`id`, `name`, `country`, `site`) VALUES (1, 'Mercedes-Benz', 'Germany', 'mercedes-benz.de'), (2, 'KIA', 'Korea', 'kia.ru'), (3, 'Toyota', 'Japan', 'toyota-global.com');

Необходимо создать новую таблицу car, на основе auto, и перенести туда все данные.

В MySQL существует два быстрых способа:

CREATE TABLE SELECT FROM

Первый способ создание и копирование таблицы при помощи команды:

CREATE TABLE <new_table> SELECT * FROM <original_table>

Данный запрос создает новую таблицу <new_table>, на основе таблицы <original_table>, и копирует данные получаемые запросом SELECT * FROM <original_table>.

Главный минус этого способа — в таблице <new_table> не будет индексов таблицы <original_table>.

Главный плюс — всего один запрос.

Пример

CREATE TABLE `car` SELECT * FROM `auto`;

CREATE TABLE LIKE и INSERT SELECT

Второй способ состоит из двух запросов, зато копирует и данные, и индексы.

Первый запрос — это копирование структуры таблицы.

Второй — перенос данных через INSERT INTO SELECT.

Пример

CREATE TABLE `car` LIKE `auto`; INSERT INTO `car` SELECT * FROM `auto`;

Результат

В обоих результатах таблица car будет содержать данные таблицы auto:

idnamecountrysite
1Mercedes-BenzGermanymercedes-benz.de
2KIAKoreakia.ru
3ToyotaJapantoyota-global.com

Категории

СУБДMySQL

Читайте также

Комментарии