CSV 파일에서 20000 행의 일부 데이터를 Mysql로 가져오고 있습니다.
CSV의 열은 MySQL 테이블의 열과 순서가 다릅니다. Mysql 테이블 열에 해당하는 열을 자동으로 할당하는 방법은 무엇입니까?
내가 실행할 때
LOAD DATA INFILE'abc.csv' INTO TABLE abc
이 쿼리는 모든 데이터를 첫 번째 열에 추가합니다.
데이터를 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 사용자의 경우 :
LOCAL
hold security risk 키워드를 사용하면 MySQL 8.0부터 LOCAL
기능이 False
기본적으로 설정됩니다 . 오류가 표시 될 수 있습니다.
오류 1148 : 사용 된 명령은이 MySQL 버전에서 허용되지 않습니다.
문서 의 지침에 따라 덮어 쓸 수 있습니다 . 이러한 덮어 쓰기는 보안 문제를 해결하는 것이 아니라 위험을 인식하고 기꺼이 감수 할 의사가 있음을 인정하는 것입니다.
IGNORE 1 LINES
여기서 정확히 무엇을하는지 알 수 있을까요? 미리 감사드립니다.
파일을 가져 오기 전에 다음을 준비해야합니다.
다음 테이블이 있다고 가정합니다.
다음 쿼리를 사용하여 테이블 만들기 :
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에서 수행하는 경우 오류를 생략하는 데 도움이되기를 바랍니다.
csv 또는 텍스트 파일에서 데이터를로드 할 수 있습니다. 테이블의 레코드가있는 텍스트 파일이있는 경우 테이블 내에서 해당 레코드를로드 할 수 있습니다. 예를 들어 각 행이 각 열의 값이있는 레코드 인 텍스트 파일이있는 경우이 방법으로 레코드를로드 할 수 있습니다.
id //field 1
name //field2
1,peter
2,daniel
...
--Windows의 예
LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';
오류 코드 : 1290이 발생했습니다. MySQL 서버가 --secure-file-priv 옵션으로 실행 중이므로이 문을 실행할 수 없습니다.
이것은 wampserver 3.0.6 64bit를 사용하는 Windows 8.1 64 비트에서 저에게 효과적이었습니다.
C : \ wamp64 \ bin \ mysql \ mysql5.7.14에서 my.ini 파일을 편집했습니다.
secure_file_priv c : \ wamp64 \ tmp \ 항목 삭제 (또는 여기에있는 디렉토리)
모든 것을 중지하고-exit wamp 등-모든 것을 다시 시작했습니다. 그런 다음 C : \ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur에서 내 cvs 파일을 펀트합니다 (마지막 디렉토리는 내 데이터베이스 이름 임).
LOAD DATA INFILE 'myfile.csv'실행
INTO TABLE 졸업생
','로 끝나는 필드
' "'로 묶임
'\ r \ n'에 의해 종료 된 줄
한 줄 무시
... 그리고 VOILA !!!
요즘 (2019 년 종료) http://www.convertcsv.com/csv-to-sql.htm 과 같은 도구를 사용하는 것을 선호합니다. csv가 올 때 사용자 실수를 줄여주는 분할 된 블록을 실행할 수있는 행이 많이 있습니다. 최종 사용자 스프레드 시트.