INSERT SELECT (MySQL)

В MySQL есть замечательная команда INSERT ... SELECT, которая позволяет быстро вставить большое количество записей из одной таблицы в другую.

Исходные данные

Например есть две таблицы auto и car. Таблица auto содержит данные, car — пустая.

Таблица auto

Создаем таблицу 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`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB

Заполняем данными.

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

Таблица car

Создаем таблицу car.

CREATE TABLE `car` ( `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`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB;

Задача

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

Запрос INSERT SELECT

Перенесем данные из таблицы auto в таблицу car при помощи INSERT ... SELECT

INSERT INTO `car` (`name`, `country`, `site`) SELECT `name`, `country`, `site` FROM `auto`

Результат

После выполнения запроса, в таблице car появятся данные.

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

PRIMARY KEY в INSERT SELECT

Чтобы было соответствие по ID можно в запросе указать PRIMARY KEY.

INSERT INTO `car` (`id`, `name`, `country`, `site`) SELECT `id`, `name`, `country`, `site` FROM `auto`

Категории

СУБДMySQL

Комментарии