45 votes

Comment charger des données INFILE dans mysql avec la première colonne en auto-incrément ?

Actuellement, nous avons un tableau similaire à celui-ci :

---------------------
ID | AField | BField|
---------------------

L'ID est à incrémentation automatique

Comment puis-je créer un CSV qui permette à la base de données de remplir automatiquement le champ ID avec un numéro d'incrémentation automatique ?

Nous avons essayé le CSV suivant mais cela ne fonctionne pas :

afieldvalue, bfieldvalue (With Column definition but still doesn't work)
0,afieldvalue,bfieldvalue 
NULL,afieldvalue,bfieldvalue

69voto

Ike Walker Points 21162

La meilleure chose à faire est d'inclure les deux colonnes non auto-incrémentées dans le CSV, puis de définir explicitement la colonne ID à NULL dans l'instruction load data infile.

Quelque chose comme ça :

LOAD DATA INFILE '/tmp/data.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
(AField, BField)
SET ID = NULL;

1 votes

Utilisez (your_table.AField, your_table.BField) à la place si votre CSV a les mêmes noms de colonnes.

0 votes

L'INFILE LOAD DATA de @Thilo ne lit pas les noms de colonnes à partir du CSV. C'est pourquoi vous devez définir les colonnes dans l'ordre exact des données des colonnes du CSV.

0 votes

Il est peut-être utile de noter que si les données ont été exportées en incluant l'élément ID colonne, il peut être importé avec ... (@UnusedVariable,AField,BField)

7voto

Alexey Bakulin Points 474

Vous pouvez "omettre" le champ ID dans une ligne de données en plaçant le signe de délimitation au début d'une ligne, comme ceci (pour le schéma de la table ID,AField,BField ) :

,afieldvalue,bfieldvalue
...

Le moteur SQL attribuera NULL à ID lors de la lecture d'un tel fichier csv

3voto

LOAD DATA INFILE '/tmp/data.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r'
(AField, BField);

2voto

Kristofer Points 1555

Essayez d'utiliser NULL comme valeur dans le fichier csv pour le champ ID.

2voto

Shubhanshu Mishra Points 751

NULL dans le fichier CSV est lu comme une STRING dans MySQL. Si vous voulez avoir des valeurs nulles dans une colonne MySQL, utilisez plutôt \N à la place de `NULL. Cela résoudra le problème et vous obtiendrez le résultat souhaité.

0 votes

Aucune des autres solutions n'a fonctionné - celle-ci a fonctionné pour ma colonne ID qui est un INT.

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