Многострочный оператор insert совпадает по форме с однострочным оператором. В нем используется ключевое слово values, после которого добавляется не один, а несколько списков expression. Так, в листинге 6.15 добавляется сразу пять записей при помощи одного оператора insert.
Точно так же, как и в случае однострочного варианта, допускается изменять порядок и состав списка добавляемых значений.
Для пакетной загрузки данных из текстового файла в таблицу в СУБД MySQL предназначен специальный оператор load data. Данный оператор работает быстрее, чем оператор insert, т. к. СУБД не требуется дополнительного времени на анализ синтаксиса оператора. Оператор имеет следующий синтаксис:
LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl
Если задано необязательное ключевое слово local, to файл читается с клиентского хоста. Если же local не указывается, то файл должен находиться на сервере.
Поля базы данных должны быть разделены символом табуляции. Тогда выполнение запроса, представленного в листинге 6.17, приводит к заполнению базы таблицы catalogs.
Перед конструкцией into table можно разместить одно из двух ключевых слов, которые управляют обработкой ситуации, когда данные из текстового файла дублируют : значения первичного или уникальных ключей:
Загрузка данных при помощи оператора load data без использования ключевых слов I shore и replace приведет к сообщению об ошибке (листинг 6.18). Однако использование оператора replace приводит к полной замене содержимого таблицы catalogs.
Ключевое слово ignore number lines позволяет задать количество number строк, которые необходимо пропустить от начала файла. Эта конструкция используется для того, чтобы пропустить заголовки столбцов, часто располагаемых на первой строке текстового файла (листинг 6.19).
Кроме базового синтаксиса, оператор load data допускает дополнительные опции, позволяющие задать формат файла данных. Это осуществляется при помощи следующих ключевых слов:
Ключевое слово lines позволяет задать символ начала и конца строки при помощи конструкций starting by и terminated by соответственно. Так, по умолчанию строка в текстовом файле должна заканчиваться символом перевода строки \п. Однако при создании текстовых файлов в среде Windows строка заканчивается двумя символами \г\п, что может приводить к неправильной интерпретации файла данных и потере информации. При помощи конструкции terminated by можно переопределить символ конца строки. Представленный в листинге 6.20 SQL-запрос при использовании его в операционной системе Windows может выглядеть следующим образом.
По умолчанию в качестве начальной строки задается пустая строка, таким образом, запросы в листинге 6.21 идентичны.
Ключевое слово fields позволяет задать порядок обработки полей, совместно с ним применяются следующие конструкции:
Запросы, представленные в листинге 6.22, идентичны.
Пусть формат текстового файла данных таков, что поля разделены запятыми, значения обрамлены двойными кавычками, а строки заканчиваются символом \r\n (Windows стиль).
Тогда запрос, загружающий данные из такого файла, может выглядеть так, как это представлено в листинге 6.23.