Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
conspect.pdf
Скачиваний:
376
Добавлен:
17.03.2016
Размер:
27.86 Mб
Скачать

Базы данных

БГУИР, ПОИТ

 

 

6.10. Оператор LOAD DATA INFILE

6.10.1.Общая структура оператора LOAD DATA INFILE

Для лучшего понимания этого материала рекомендуется повторить SELECT … INTO OUTFILE.

Оператор LOAD DATA INFILE позволяет прочитать содержимое текстового файла в таблицу, причём выполняется это очень быстро (быстрее, чем чтение классических дампов БД).

Использование этого оператора – достаточно большая редкость, тем не менее – рассмотрим, как он работает. Итак.

6.10.2.LOAD DATA INFILE: [CONCURRENT]

Ключевое слово CONCURRENT позволяет в некоторых случаях разрешить чтение из таблицы, в то время как LOAD DATA INFILE заполняет её данными. Это актуально для метода доступа MyISAM.

Подробности см. здесь: http://dev.mysql.com/doc/refman/5.5/en/loa d-data.html

Стр: 237/248

Базы данных

БГУИР, ПОИТ

 

 

6.10.3.LOAD DATA INFILE: [CONCURRENT]

Наличие ключевого слова LOCAL означает, что файл находится на стороне клиента. Отсутствие этого слова означает, что файл находится на стороне сервера. В обоих случаях есть ряд специфических ограничений.

В большинстве своём они интуитивно понятны, но лучше почитать подробнее: http://dev.mysql.com/doc/refman/5.5/en/loa d-data.html

6.10.4.LOAD DATA INFILE: [REPLACE | IGNORE]

Эти ключевые слова описывают поведение СУБД в случае, если при вставке данных происходит дублирование PK или уникальных индексов.

IGNORE (автоматически включается по умолчанию при использовании LOCAL) – игнорировать дубликаты.

REPLACE – заменять записи в таблице дубликатами (+ см. «Оператор REPLACE»).

6.10.5.LOAD DATA INFILE: [CHARACTER SET charset_name]

Позволяет указать кодировку, в которой находится текст в файле. Несмотря на то, что этот фрагмент является опцио-

нальным, ВСЕГДА указывайте коди-

ровку ЯВНО, иначе может получиться много неприятных сюрпризов (даже тогда, когда кажется, что все умолчания указаны верно, всё везде совпадает и т.д.)

Стр: 238/248

Базы данных

БГУИР, ПОИТ

 

 

6.10.6.LOAD DATA INFILE: [FIELDS TERMINATED … ENCLOSED …]

Всю эту секцию проще показать одной картинкой. Если хотите много-много текста – вам сюда: http://dev.mysql.com/doc/refman/5.5/en/loa d-data.html

Итак, пояснение картинкой:

6.10.7.LOAD DATA INFILE: [LINES STARTING … TERMINATED BY …]

Внекоторых случаях бывает необходимо указать последовательности символов, которые нужно трактовать как начало и конец анализируемых строк. Данный фрагмент оператора LOAD DATA INFILE позволяет указать эти ограничители.

Подробнее посмотрим на примере чуть позже.

Стр: 239/248

Базы данных

БГУИР, ПОИТ

 

 

6.10.8.LOAD DATA INFILE: [IGNORE number {LINES|ROWS}]

Самая простая часть оператора – указывает, сколько первых строк из файла пропустить.

При этом пропускается «то, что строкой посчитает СУБД» (см. LINES STARTING BY … TERMINATED BY), а не то, что строкой посчитает человек, просматривающий файл в текстовом редакторе.

6.10.9.LOAD DATA INFILE: [SET col_name = expr]

Позволяет выставлять тому или иному полю таблицы значение, отсутствующее в импортируемом файле, или полученное на основе уже импортированных (находящихся слева) колонок.

Это тоже будет в примере, который мы прямо сейчас и рассмотрим.

Стр: 240/248

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]