MYSQL импортирует данные из csv, используя LOAD DATA INFILE

Я импортирую некоторые данные из 20000 строк из файла CSV в Mysql.

Столбцы в CSV находятся в другом порядке, чем столбцы таблицы MySQL. Как автоматически назначить столбцы, соответствующие столбцам таблицы Mysql?

Когда я выполняю

LOAD DATA INFILE'abc.csv' INTO TABLE abc

этот запрос добавляет все данные в первый столбец.

Пожалуйста, предложите автоматический синтаксис для импорта данных в Mysql.

Ответ 1

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

Проверьте эту ссылку MySQL - LOAD DATA INFILE.

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

Ответ 2

Вероятно, вам нужно установить FIELDS TERMINATED BY ',' или что-то вроде разделителя.

Для CSV файла ваше утверждение должно выглядеть следующим образом:

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Ответ 3

Перед импортом файла вам необходимо подготовить следующее:

  • Таблица базы данных, в которую будут импортированы данные из файла.
  • Файл CSV с данными, которые соответствуют числу столбцов таблицу и тип данных в каждом столбце.
  • У учетной записи, которая подключается к серверу базы данных MySQL, есть ФАЙЛ и привилегии INSERT.

Предположим, что мы имеем следующую таблицу:

введите описание изображения здесь

СОЗДАТЬ ТАБЛИЦУ, ИСПОЛЬЗУЯ СЛЕДУЮЩИЙ ЗАПРОС:

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

ВАШ ОБЗОР CSV ДОЛЖЕН БЫТЬ ПРАВИЛЬНО ФОРМАТИРОВАН ДЛЯ ПРИМЕРЫ СМОТРЕТЬ СЛЕДУЮЩИЕ ПРИЛОЖЕННОЕ ИЗОБРАЖЕНИЕ:

введите описание изображения здесь

Если все в порядке, выполните следующие действия: ЗАГРУЗИТЕ ДАННЫЕ ИЗ ФАЙЛА CSV:

ПРИМЕЧАНИЕ. Добавьте абсолютный путь к файлу CSV.

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Если все сделано. вы успешно экспортировали данные из CSV в таблицу

Ответ 4

Синтаксис:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' INTO TABLE `tbl_name` CHARACTER SET [CHARACTER SET charset_name] FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] [LINES[TERMINATED BY 'string']] [IGNORE number {LINES | ROWS}]

См. этот пример:

LOAD DATA LOCAL INFILE 'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer` CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

Ответ 5

Вы можете загружать данные из CSV или текстового файла. Если у вас есть текстовый файл с записями из таблицы, вы можете загрузить эти записи в таблицу. Например, если у вас есть текстовый файл, где каждая строка представляет собой запись со значениями для каждого столбца, вы можете загрузить записи таким образом.

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

- пример в окнах

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 

Ответ 6

Если вы используете LOAD DATA LOCAL INFILE из оболочки Windows, и вам нужно использовать OPTIONALLY ENCLOSED BY '"', вам нужно будет сделать что-то подобное, чтобы правильно выполнить символы:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out

Ответ 7

Вставить объем более 7000000 записей за 1 минуту в базе данных (сверхбыстрый запрос с расчетом)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP и RRP_nl и RRP_bl не находятся в csv, но мы вычисляем, что и после вставки, что.

Ответ 8

Я получаю код ошибки: 1290. Сервер MySQL работает с ключом -secure-file-priv , поэтому он не может выполнить этот оператор

Это работало для меня на Windows 8.1 64 бит, используя wampserver 3.0.6 64bit.

Отредактированный файл my.ini из C:\wamp64\bin\mysql\mysql5.7.14

Удалить запись secure_file_priv c:\wamp64\tmp\(или все, что у вас есть)

Остановил все: -exit wamp etc.- и перезапустил все; затем punt мой файл cvs на C:\wamp64\bin\mysql\mysql5.7.14\data\u242349266_recur (последний каталог, являющийся моим именем базы данных)

выполняется LOAD DATA INFILE 'myfile.csv'

INTO TABLE alumnos

ПОЛЯ, ПРОВЕРЯЕМЫЕ ','

ENCLOSED BY '"'

ЛИНИИ, ПРЕРЫВАННЫЕ '\ r\n'

IGNORE 1 LINES

... и VOILA!!!

Ответ 9

предположим, что вы используете xampp и phpmyadmin

у вас есть имя файла 'ratings.txt' имя таблицы 'рейтинги' и имя базы данных 'movies'

если ваш xampp установлен в "C:\xampp \"

скопируйте файл "ratings.txt" в папку "C:\xampp\mysql\data\movies"

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

Надеюсь, это поможет вам опустить вашу ошибку, если вы делаете это на localhost