LOAD DATA INFILE을 사용하여 CSV 파일에서 MySQL 데이터베이스로 선택한 열을 삽입하는 방법


83

10 개의 열이 포함 된 CSV 파일이 있습니다. 해당 파일에서 일부 열만 선택하고 LOAD DATA INFILE명령을 사용하여 MySQL 데이터베이스로로드하고 싶습니다 .

답변:


118

MySQL의 테이블에 데이터를로드하고 열을 지정합니다.

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

@ col1,2,3,4는 csv 파일 열 (4라고 가정)을 보유하는 변수이며, id는 테이블 열입니다.


2
mysql에서 답변을 실행하고 오류가 나타납니다 ERROR 1148 (42000): The used command is not allowed with this MySQL version..
shgnInc


8
100 개의 열이 있고 2 개의 열만 가져 오려면 (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; 아니면 쉬운 방법이 있습니까?
Dharma

@Dharma 100 개의 열 이름을 인쇄하는 파이썬 3 프로그램for i in range(1,100): print("@column",i,",",end="",sep="")
Agnel Vishal

39
LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

column1, column2 등을 열 이름으로 바꾸고 무시하려는 CSV의 열이있는 곳에 @dummy를 넣으십시오.

여기에 자세한 내용이 있습니다 .


5
그런 식으로 실행하면 구문 오류가 발생합니다. (field,names)세미콜론이 작동하려면 끝에 세미콜론 을 넣어야합니다 .
Stephen Ostermiller

1
들어오는 모든 csv 열을 알지 못하면 확장되지 않습니다.
Charles Harmon

4
F는 어떻게이 +38 표입니까? 잘못된 SQL 구문입니다.
John

34

데이터로드 infile 문에서 CSV의 열 이름을 지정합니다.

코드는 다음과 같습니다.

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

여기서는 테이블에 두 개의 열 (열 이름으로 선택할 수 있음)에만 데이터를 추가합니다.

주의해야 할 것은 한 줄 (행) 당 두 개의 값이있는 CSV 파일 (filename.csv)이 있다는 것입니다. 그렇지 않으면 언급하십시오. 나는 다른 해결책이 있습니다.

감사합니다.


2
아마도 다른 답변은 약간 구식입니다. MySQL을 5.6으로 나를 위해 일한이 하나
파비오 Napodano

파일의 전체 경로를 입력 해 주셔서 감사합니다. 잠시 동안 저는 csv 파일을 넣어야하는 MySQL 디렉토리를 찾고있었습니다!
Shrinath

1
경로가 허용 된 보안 영역에서 나와야하지만 이것은 가장 잘 작동합니다. 이 명령을 실행하십시오 SHOW VARIABLES LIKE "secure_file_priv"; 다음이 위치에 csv 파일을 드롭
가네 Krishnan에게

1
@FabioNapodano와 동의합니다. 내 v5.7의 경우 문 끝에 열 이름을 넣어야했습니다.
Anne Gunn

불행히도 이것은 질문에 대한 답이 아닙니다. 이를 위해서는 .csv에 두 개의 열이 있어야하며이를 DB의 두 특정 열에 삽입합니다. 포스터 (10)의 2 열에서 CSV 당기는 요청
daprezjer

13

예:

ae.csv 파일의 내용 :

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);

열 3 만 넣으십시오.

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400

1
예를 들면 항상 더 나은
피에르 드 LESPINAY

3

데이터베이스 테이블에 csv의 열 수보다 많은 열이있는 경우 다음과 같이 진행할 수 있습니다.

LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);

0

다음과 같은 오류가있는 경우 :

오류 코드 : 1290. MySQL 서버가 --secure-file-priv 옵션으로 실행 중이므로이 문을 실행할 수 없습니다.

이 명령을 실행하여 파일을로드 할 수있는 폴더를 확인할 수 있습니다.

SHOW VARIABLES LIKE "secure_file_priv";

그런 다음 해당 폴더의 파일을 복사하고 LOAD DATA LOCAL INFILE대신 LOAD DATA INFILE.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.