ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Вставка множества записей одним запросом в MySQL

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

  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 20 октября 2014 г. 22:10

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

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

    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');
    С возвращением, Пiха!
  • Sinkler

    Сообщения: 9652 Репутация: N Группа: в ухо

    Spritz 20 октября 2014 г. 22:16, спустя 5 минут 15 секунд

    даёшь авторские материалы!)

  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 20 октября 2014 г. 22:18, спустя 2 минуты 42 секунды

    Да заебало, лезу в код, а там такое… Ня, что бы помнили)

    Зы: Давно не было меня. С разделом статьи решили чо?
    С возвращением, Пiха!
  • Sinkler

    Сообщения: 9652 Репутация: N Группа: в ухо

    Spritz 20 октября 2014 г. 22:24, спустя 5 минут 27 секунд

    Да заебало, лезу в код, а там такое… Ня, что бы помнили)

    Зы: Давно не было меня. С разделом статьи решили чо?

    @ivanscm, http://pyha.ru/forum/topic/8760

  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 20 октября 2014 г. 22:40, спустя 16 минут 28 секунд

    Если импорт разовый - то можно и в цикле
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 20 октября 2014 г. 23:14, спустя 33 минуты 15 секунд

    Если импорт разовый - то можно и в цикле

    @master, уху.

    во вторых - щас научишь детей хуете и они будут ловить "Lost connection to mysql server"

    Сапожник без сапог
  • adw0rd

    Сообщения: 22900 Репутация: N Группа: в ухо

    Spritz 20 октября 2014 г. 23:58, спустя 44 минуты 19 секунд

    Ну в целом верно, но если данных много, то надо делать чанки (вставлять порциями)

    adw/0
  • phpdude

    Сообщения: 26611 Репутация: N Группа: в ухо

    Spritz 21 октября 2014 г. 3:21, спустя 3 часа 23 минуты 6 секунд

    Ну в целом верно, но если данных много, то надо делать чанки (вставлять порциями)

    @adw0rd, уху

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!