Как загрузить данные из файла в таблицу MySQL

Как загрузить данные из файла в таблицу MySQL
/assets/blog/authors/asanov_small.jpg
Ildar Asanov
#mysql#db

Загрузить данные в таблицу из файла

Простейший способ:

LOAD DATA INFILE 'data.csv' INTO TABLE my_table

Для форматированных данных (например, разделенных запятой):

LOAD DATA INFILE 'data.csv' INTO TABLE my_table
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'

Что это означает?

  • Искать концы строк в виде символов '\r\n'
  • Разбивать строки на поля по символам запятой (,)
  • Ожидать, что поля могут быть заключены в символы цитирования
  • Интерпретировать встречающиеся символы табуляции, новой строки или '', предваренные '', как литералы

Ошибка Access denied for user

Если возникла ошибка Access denied for user, добавьте атрибут LOCAL перед INFILE:

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE my_table

Загрузить данные в таблицу для конкретных полей

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2;

LOAD DATA INFILE вместе с JOIN

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE table_1 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\r\n' 
(@col1,@col2,@col3,@col4) 
set user_id=@col1, username=(select username from users where user_id = @col1);

The used command is not allowed with this MySQL version

Если возникла такая ошибка, при подключении к MySQL укажите флаг --local-infile:

mysql -uroot --local-infile database

LOAD DATA INFILE игнорировать первую строку

Если в первой строке файла содержатся заголовки полей, добавьте IGNORE 1 LINES.

Например, для файла data.csv:

id title value
3 Paris 100
4 London 67
5 Moscow 341

Команда загрузки:

LOAD DATA INFILE '/home/user1/data.csv' 
INTO TABLE my_table 
IGNORE 1 LINES;

Если было полезным, то я был бы рад подписке на мой телеграмм канал и если вы поделитесь с друзьями: @asanovpro

More Stories