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 사용자의 경우 :
LOCAL
hold 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 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
답변
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에서 수행하는 경우 오류를 생략하는 데 도움이되기를 바랍니다.