134 votes

Importer des données dans MySQL à partir d'un fichier CSV en utilisant LOAD DATA INFILE

J'importe des données de 20 000 lignes d'un fichier CSV vers MySQL.

Les colonnes du fichier CSV sont dans un ordre différent de celui des colonnes des tables MySQL. Comment puis-je attribuer automatiquement des colonnes correspondant aux colonnes des tables MySQL ?

Quand j'exécute

LOAD DATA INFILE 'abc.csv' INTO TABLE abc

cette requête ajoute toutes les données à la première colonne.

Quelle est la syntaxe automatique pour importer des données vers MySQL ?

218voto

Saharsh Shah Points 11307

Vous pouvez utiliser le CHARGER LES DONNÉES DANS LE FICHIER pour importer un fichier CSV dans une table.

Consultez le lien MySQL - CHARGER LES DONNÉES 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...);

Pour les utilisateurs de MySQL 8.0 :

Utilisation de la LOCAL Le mot-clé présente des risques de sécurité et, depuis MySQL 8.0, le mot-clé LOCAL est réglé sur False par défaut. Vous pourriez voir l'erreur :

ERROR 1148 : La commande utilisée n'est pas autorisée avec cette version de MySQL.

Vous pouvez l'écraser en suivant la procédure les instructions dans la documentation . Attention, un tel écrasement ne résout pas le problème de sécurité, mais constitue simplement une reconnaissance que vous êtes conscient et prêt à prendre le risque.

63voto

ckim Points 374

Vous devez probablement définir l'option FIELDS TERMINATED BY ',' ou quel que soit le délimiteur.

Pour un fichier CSV, votre déclaration devrait ressembler à ceci :

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

56voto

Sunny S.M Points 2465

Avant d'importer le fichier, vous devez préparer les éléments suivants :

  • Une table de base de données dans laquelle les données du fichier seront importées.
  • Un fichier CSV contenant des données qui correspondent au nombre de colonnes de l'indicateur de performance. tableau et le type de données dans chaque colonne.
  • Le compte, qui se connecte au serveur de base de données MySQL, a FILE et INSERT.

Supposons que nous ayons le tableau suivant :

Enter image description here

Créez la table en utilisant la requête suivante :

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

Votre fichier CSV doit être correctement formaté. Par exemple, voir l'image jointe suivante :

Enter image description here

Si tout va bien, veuillez exécuter la requête suivante pour charger les données du fichier CSV :

Note : Veuillez ajouter le chemin absolu de votre fichier 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;

Si tout a été fait, vous avez exporté avec succès les données du fichier CSV vers le tableau.

17voto

Md. Nashir Uddin Points 454

Syntaxe :

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}]

Voir cet exemple :

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;

12voto

krunal panchal Points 119

Insertion en masse de plus de 7 000 000 d'enregistrements en 1 minute dans la base de données (requête super rapide avec calcul) :

    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,
         ID = NULL

RRP y RRP_bl ne sont pas dans le fichier CSV, mais nous les calculons et les insérons ensuite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X