[mysql] LOAD DATA INFILE을 사용하여 CSV에서 MySQL 가져 오기 데이터

CSV 파일에서 20000 행의 일부 데이터를 Mysql로 ​​가져오고 있습니다.

CSV의 열은 MySQL 테이블의 열과 순서가 다릅니다. Mysql 테이블 열에 해당하는 열을 자동으로 할당하는 방법은 무엇입니까?

내가 실행할 때

LOAD DATA INFILE'abc.csv' INTO TABLE abc

이 쿼리는 모든 데이터를 첫 번째 열에 추가합니다.

데이터를 Mysql로 ​​가져 오기위한 자동 구문을 제안하십시오.



답변

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...);

MySQL 8.0 사용자의 경우 :

LOCALhold security risk 키워드를 사용하면 MySQL 8.0부터 LOCAL기능이 False기본적으로 설정됩니다 . 오류가 표시 될 수 있습니다.

오류 1148 : 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다.

문서지침에 따라 덮어 쓸 수 있습니다 . 이러한 덮어 쓰기는 보안 문제를 해결하는 것이 아니라 위험을 인식하고 기꺼이 감수 할 의사가 있음을 인정하는 것입니다.


답변

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;


답변

파일을 가져 오기 전에 다음을 준비해야합니다.

  • 파일의 데이터를 가져올 데이터베이스 테이블입니다.
  • 테이블의 열 수 및 각 열의 데이터 유형과 일치하는 데이터가 포함 된 CSV 파일입니다.
  • MySQL 데이터베이스 서버에 연결하는 계정에는 FILE 및 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에서 테이블로 데이터를 성공적으로 내보냈습니다.


답변

통사론:

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;


답변

데이터베이스에 1 분 안에 7000000 개 이상의 레코드를 대량으로 삽입 (계산을 통한 초고속 질의)

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
    ');
$affected = (int) (mysqli_affected_rows($cons))-1;
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP 및 RRP_nl 및 RRP_bl은 csv에 없지만이를 계산하고 삽입 한 후에 계산합니다.


답변

LOAD DATA LOCAL INFILEWindows 셸에서 실행 중이고 를 사용해야하는 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


답변

xampp 및 phpmyadmin을 사용하고 있다고 가정 해 보겠습니다.

파일 이름은 ‘ratings.txt’테이블 이름은 ‘ratings’이고 데이터베이스 이름은 ‘movies’입니다.

xampp가 “C : \ xampp \”에 설치된 경우

“C : \ xampp \ mysql \ data \ movies”폴더에 “ratings.txt”파일을 복사하십시오.

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

localhost에서 수행하는 경우 오류를 생략하는 데 도움이되기를 바랍니다.