MySQL
CHARGER L'INFILE DE DONNÉES
Recherche…
Syntaxe
- LOAD DATA [LOW_PRIORITY | CONCURRENCE] [LOCAL] INFILE 'nom_fichier'
- INTO TABLE nom_de_table
- [CHARACTER SET charset]
- [{CHAMPS | COLUMNS} [TERMINATED BY 'string'] [[FACULTATIF] ENCLOS PAR 'char']]
- [LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
- [Numéro IGNORE {LINES | ROWS}]
- [(col_name_or_user_var, ...)]
- [SET col_name = expr, ...]
utiliser LOAD DATA INFILE pour charger une grande quantité de données dans la base de données
Considérez l'exemple suivant en supposant que vous avez un fichier CSV délimité par un fichier ';' à charger dans votre base de données.
1;max;male;manager;12-7-1985
2;jack;male;executive;21-8-1990
.
.
.
1000000;marta;female;accountant;15-6-1992
Créez la table pour l'insertion.
CREATE TABLE `employee` ( `id` INT NOT NULL ,
`name` VARCHAR NOT NULL,
`sex` VARCHAR NOT NULL ,
`designation` VARCHAR NOT NULL ,
`dob` VARCHAR NOT NULL );
Utilisez la requête suivante pour insérer les valeurs dans cette table.
LOAD DATA INFILE 'path of the file/file_name.txt'
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,dob)
Prenons le cas où le format de date est non standard.
1;max;male;manager;17-Jan-1985
2;jack;male;executive;01-Feb-1992
.
.
.
1000000;marta;female;accountant;25-Apr-1993
Dans ce cas, vous pouvez changer le format de la colonne dob
avant de l'insérer comme ceci.
LOAD DATA INFILE 'path of the file/file_name.txt'
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,@dob)
SET date = STR_TO_DATE(@date, '%d-%b-%Y');
Cet exemple de LOAD DATA INFILE ne spécifie pas toutes les fonctionnalités disponibles.
Vous pouvez voir plus de références sur LOAD DATA INFILE ici .
Importer un fichier CSV dans une table MySQL
La commande suivante permet d'importer des fichiers CSV dans une table MySQL avec les mêmes colonnes tout en respectant les règles de citation et d'échappement CSV.
load data infile '/tmp/file.csv'
into table my_table
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\n'
ignore 1 lines; -- skip the header row
Charger des données avec des doublons
Si vous utilisez la LOAD DATA INFILE
pour remplir une table avec des données existantes, vous constaterez souvent que l'importation échoue en raison de doublons. Il existe plusieurs manières possibles de surmonter ce problème.
CHARGER LES DONNÉES LOCALES
Si cette option a été activée sur votre serveur, elle peut être utilisée pour charger un fichier existant sur l'ordinateur client plutôt que sur le serveur. Un effet secondaire est que les lignes en double pour les valeurs uniques sont ignorées.
LOAD DATA LOCAL INFILE 'path of the file/file_name.txt'
INTO TABLE employee
LOAD DATA INFILE 'fname' REMPLACER
Lorsque le mot-clé replace est utilisé, les clés uniques ou primaires dupliquées entraîneront le remplacement de la ligne existante par de nouvelles.
LOAD DATA INFILE 'path of the file/file_name.txt'
REPLACE INTO TABLE employee
LOAD DATA INFILE 'fname' IGNORE
À l'inverse de REPLACE
, les lignes existantes seront conservées et les nouvelles ignorées. Ce comportement est similaire à LOCAL
décrit ci-dessus. Toutefois, le fichier n'a pas besoin d'exister sur l'ordinateur client.
LOAD DATA INFILE 'path of the file/file_name.txt'
IGNORE INTO TABLE employee
Charger via la table intermédiaire
Parfois, ignorer ou remplacer tous les doublons peut ne pas être l'option idéale. Vous devrez peut-être prendre des décisions en fonction du contenu des autres colonnes. Dans ce cas, la meilleure option est de charger dans une table intermédiaire et de transférer à partir de là.
INSERT INTO employee SELECT * FROM intermediary WHERE ...
import / export
importer
SELECT a,b,c INTO OUTFILE 'result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table;
Exportation
LOAD DATA INFILE 'result.txt' INTO TABLE table;