Вставка множества записей одним запросом в MySQL

В одном из рабочих проектов я встретил пример плохого тона программирования. Это был модуль импорта записей из текстового файла. Вставка записей проходила прямо в цикле чтения и разбора файла. Запомните, читатели, запросы в цикле это плохо, это очень плохо. Множество запросов к базе грузит базу и увеличивает время работы скрипта или приложения. Нужно заранее продумывать алгоритм и избегать таких мест в коде. Все запросы по логике должны выноситься за пределы цикла, будь то выборка, вставка или обновление. Гораздо лучше сохранить необходимые данные в буфер и затем их использовать. Нужна вставка или обновление? Подготавливайте данные и одним запросом отправляйте их в базу данных. В этой записи я напомню как вставить одним запросом множество строк.

Вставка одной строки обычно происходит подобным запросом:

INSERT INTO example
 (example_id, name, value, other_value)
 VALUES
 (100, 'Name 1', 'Value 1', 'Other 1');

Вставка множества строк производится так:

 INSERT INTO example
 (example_id, name, value, other_value)
 VALUES
 (100, 'Name 1', 'Value 1', 'Other 1'),
 (101, 'Name 2', 'Value 2', 'Other 2'),
 (102, 'Name 3', 'Value 3', 'Other 3'),
 (103, 'Name 4', 'Value 4', 'Other 4');

Можно опустить название полей:

INSERT INTO example
 VALUES
 (100, 'Name 1', 'Value 1', 'Other 1'),
 (101, 'Name 2', 'Value 2', 'Other 2'),
 (102, 'Name 3', 'Value 3', 'Other 3'),
 (103, 'Name 4', 'Value 4', 'Other 4');

С пятницей! И хорошего кода!

Базы данных/ 06.12.2013
Яндекс.Метрика