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

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



답변

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는 테이블 열입니다.


답변

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를 넣으십시오.

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


답변

데이터로드 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)이 있다는 것입니다. 그렇지 않으면 언급하십시오. 나는 다른 해결책이 있습니다.

감사합니다.


답변

예:

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


답변

데이터베이스 테이블에 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,...);


답변

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

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

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

SHOW VARIABLES LIKE "secure_file_priv";

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


답변