2010-11-17 16 views

Répondre

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

Il suffit de remplacer le colonne1, colonne2, etc .. avec vos noms de colonnes, et mis @dummy anwhere il y a une colonne dans le CSV que vous voulez ignorer. Tous les détails here.

+2

Je reçois une erreur de syntaxe quand je cours quelque chose comme ça. Je dois mettre le '(champ, noms)' juste avant le point-virgule à la fin pour le faire fonctionner. –

+0

Cela ne se produit pas si vous ne connaissez pas toutes les colonnes csv. –

92

Charger des données dans une table MySQL et spécifier des colonnes:

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 sont des variables pour tenir les colonnes du fichier csv (assumer 4) nom, id sont des colonnes de table.

+0

Je lance votre réponse dans mysql et affiche une erreur: 'ERROR 1148 (42000): La commande utilisée n'est pas autorisée avec cette version de MySQL'. – shgnInc

+0

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

+2

Et si j'ai 100 colonnes et que je veux juste importer 2 colonnes, alors devrais-je écrire (@ col1, @ col2, ... @ col100) nom de l'ensemble = @ col4, id- @ col2; ou il y a un moyen facile? – Dharma

23

Spécifiez le nom des colonnes dans le fichier CSV dans l'instruction de chargement de fichier de données.

Le code est comme ceci:

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

Ici vous allez avec l'ajout de données à deux colonnes (vous pouvez les choisir avec le nom de la colonne) à la table. La seule chose à faire est que vous ayez un fichier CSV (filename.csv) avec deux valeurs par ligne (ligne). Sinon, veuillez mentionner. J'ai une solution différente.

Merci.

+2

probablement les autres réponses sont un peu obsolètes. celui-ci a fonctionné pour moi avec MySQL 5.6 –

+0

Merci d'avoir mis le chemin d'accès complet au fichier. Pendant un moment, je cherchais le répertoire MySQL dans lequel je devais mettre le fichier csv! – Shrinath

+0

Celui-ci fonctionne le mieux, bien que le chemin doit être à partir des zones sécurisées autorisées. Exécutez cette commande AFFICHER DES VARIABLES COMME "secure_file_priv"; , puis déposez le fichier csv à cet emplacement –

6

Exemple:

contenu du fichier 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) 
); 

Pour mettre seulement la colonne 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