2010-11-17 32 views

Respuesta

37
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'; 

basta con sustituir la columna 1, columna2, etc .. con los nombres de las columnas, y poner @dummy anwhere hay una columna en el CSV que desea ignorar.

Detalles completos here.

+2

me sale un error de sintaxis cuando corro algo así. Tengo que poner el '(campo, nombres)' justo antes del punto y coma al final para que funcione. –

+0

Esto no escala a menos que sepa todas las columnas csv entrantes. –

92

Cargar datos en una tabla en MySQL y especificar columnas:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
(@col1,@col2,@col3,@col4) set [email protected],[email protected] ; 

@ col1,2,3,4 son variables para contener las columnas de archivos CSV (suponga 4) nombre, identificación son las columnas de la tabla.

+0

Ejecuto su respuesta en mysql y aparece un error: 'ERROR 1148 (42000): El comando usado no está permitido con esta versión de MySQL'. – shgnInc

+0

@shgnInc refiera esto http://stackoverflow.com/questions/16285864/how-can-i-correct-mysql-load-error – ArK

+2

¿Qué pasa si tengo 100 columnas y solo quiero importar 2 columnas, entonces debería escribir (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; o hay una manera fácil? – Dharma

23

Especifique el nombre de las columnas en el archivo CSV en la declaración del archivo de carga de datos.

El código es así:

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

Aquí vas con la adición de datos a sólo dos columnas (se puede elegir con el nombre de la columna) de la tabla.

Lo único que debe tener cuidado es que tiene un archivo CSV (filename.csv) con dos valores por línea (fila). De lo contrario, por favor mencionar. Tengo una solución diferente.

Gracias.

+2

probablemente las otras respuestas estén un poco desactualizadas. este funcionó para mí con MySQL 5.6 –

+0

Gracias por poner la ruta completa al archivo. ¡Por un momento, estaba buscando el directorio MySQL en el que tengo que poner el archivo csv! – Shrinath

+0

Este funciona mejor, aunque el camino debe ser desde las áreas seguras permitidas. Ejecute este comando MOSTRAR VARIABLES COMO "secure_file_priv"; y luego suelte el archivo csv en esta ubicación –

6

Ejemplo:

contenido del archivo 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) 
); 

Para poner única columna 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 
Cuestiones relacionadas