mysql: импорт в таблицу из текстового файла
Было актуально для импорта большого csv, для экономии ресурсов на разборку файла при помощи php.
LOAD DATA LOCAL INFILE "file_name.csv" INTO TABLE table_name COLUMNS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
Готовый пример php:
mysql_query("TRUNCATE TABLE `bitrix_catalog`;"); mysql_query("LOAD DATA LOCAL INFILE \"".$file_catalog_path."\" INTO TABLE bitrix_catalog COLUMNS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;");
Скрипт актуален для импорта файлов очень большого размера для экономии ресурсов хостинга, таких как время выполнения скрипта, лимит оперативной памяти и т.д. В конкретном случае использовалась дальнейшая обработка данных, выборка и частичная вставка в необходимые таблицы БД структурированных данных.
Используя LOAD DATA LOCAL INFILE файл размеров 200Mb импортировался практически мгновенно, в отличии от его разбора при помощи fgetcsv, когда импорт произвести не удалось вовсе.
К тому же если импортируемый текст в формате csv и в ячейках встречаются переносы строк, то используя fgetcsv разобрать такую таблицу не удастся. Необходимо или использовать сторонние библиотеки вроде этой http://krylov.org.ua/?p=999 или писать собственных импорт что потребует еще и дополнительных затрат времени.
Есть вариант использования LOAD DATA INFILE без использования опции LOCAL, но на хостинге такую команду выполнить скорее всего не удастся, т.к. у пользователя будет недостаточно привилегий.