Cách chèn các cột đã chọn từ tệp CSV vào cơ sở dữ liệu MySQL bằng LOAD DỮ LIỆU THÔNG TIN


83

Tôi có một tệp CSV chứa 10 cột. Tôi chỉ muốn chọn một số cột từ tệp đó và tải chúng vào cơ sở dữ liệu MySQL bằng LOAD DATA INFILElệnh.

Câu trả lời:


118

Tải dữ liệu vào một bảng trong MySQL và chỉ định các cột:

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 là các biến để giữ tên các cột tệp csv (giả sử 4), id là các cột của bảng.


2
Tôi chạy câu trả lời trong mysql và xuất hiện một lỗi: ERROR 1148 (42000): The used command is not allowed with this MySQL version.
shgnnc

@shgnInc tham chiếu điều này stackoverflow.com/questions/16285864/…
ArK

8
Điều gì sẽ xảy ra nếu tôi có 100 cột và tôi chỉ muốn nhập 2 cột, thì tôi có nên viết (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2 không; hoặc có một cách dễ dàng?
Pháp

@Dharma Một chương trình python 3 để in 100 tên cộtfor 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';

Chỉ cần thay thế column1, column2, v.v. bằng các tên cột của bạn và đặt @dummy ở nơi có cột trong CSV mà bạn muốn bỏ qua.

Chi tiết đầy đủ tại đây .


5
Tôi gặp lỗi cú pháp khi tôi chạy một cái gì đó như vậy. Tôi phải đặt (field,names)ngay trước dấu chấm phẩy ở cuối để nó hoạt động.
Stephen Ostermiller

1
Điều này không chia tỷ lệ trừ khi bạn biết tất cả các cột csv sắp xuất hiện.
Charles Harmon

4
Làm thế nào mà F đây là +38 phiếu bầu? Đó là cú pháp SQL sai.
John

34

Chỉ định tên của các cột trong CSV trong câu lệnh tệp trong tệp dữ liệu tải.

Mã như thế này:

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

Ở đây, bạn chỉ thêm dữ liệu vào hai cột (bạn có thể chọn chúng cùng với tên của cột) vào bảng.

Điều duy nhất bạn phải quan tâm là bạn có một tệp CSV (filename.csv) với hai giá trị trên mỗi dòng (hàng). Nếu không xin vui lòng đề cập. Tôi có một giải pháp khác.

Cảm ơn bạn.


2
có lẽ các câu trả lời khác là một chút lỗi thời. cái này làm việc cho tôi với MySQL 5.6
Fabio Napodano

Cảm ơn bạn đã đặt đường dẫn đầy đủ đến tệp. Trong giây lát, tôi đã tìm kiếm thư mục MySQL mà tôi phải đặt tệp csv!
Shrinath

1
Cách này hoạt động tốt nhất mặc dù đường dẫn phải từ các khu vực an toàn được phép. Chạy lệnh này HIỂN THỊ CÁC BIẾN TẦN NHƯ "secure_file_priv"; và sau đó thả các tập tin csv ở vị trí này
Ganesh Krishnan

1
Đồng ý với @FabioNapodano. Đối với v5.7 của tôi, tôi cần đặt tên cột ở cuối câu lệnh.
Anne Gunn

Điều này không trả lời câu hỏi, thật không may. Điều này yêu cầu phải có hai cột trong .csv và chèn chúng vào hai cột cụ thể trong DB. Người đăng yêu cầu kéo 2 cột từ csv là 10.
daprezjer

12

Thí dụ:

nội dung của tệp 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) 
);

Đối với chỉ đặt cột 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
Ví dụ luôn tốt hơn
Pierre de LESPINAY

3

nếu bạn có số cột trong bảng cơ sở dữ liệu nhiều hơn số cột trong csv của mình, bạn có thể tiến hành như sau:

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

Đối với những người gặp lỗi sau:

Mã lỗi: 1290. Máy chủ MySQL đang chạy với tùy chọn --secure-file-priv nên nó không thể thực thi câu lệnh này

Bạn chỉ cần chạy lệnh này để xem thư mục nào có thể tải tệp từ:

SHOW VARIABLES LIKE "secure_file_priv";

Sau đó, bạn phải sao chép các tệp trong thư mục đó và chạy truy vấn với LOAD DATA LOCAL INFILEthay vì LOAD DATA INFILE.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.