J'ai rencontré des problèmes avec la commande LOAD DATA INFILE car je voulais ignorer les lignes qui se trouvaient déjà dans la base de données .. si j'ai une table avec les données suivantes,
id |name |age
--------------------
1 |aaaa |22
2 |bbbb |21
3 |bbaa |20
4 |abbb |22
5 |aacc |22
Où id est la valeur d'incrémentation automatique. un fichier csv contient des données comme suit,
"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"
Je veux ignorer les lignes,
"aaaa","22"
"abbb","22"
"aacc","22"
et télécharger le reste à la table. et la requête que j'ai encore qui charge tout sur la table est la suivante,
LOAD DATA INFILE 'member.csv'
INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
S'IL VOUS PLAÎT aidez-moi sur cette tâche .. Il sera très apprécié .. j'ai essayé de nombreux liens, mais n'a pas aidé :(
Créez un index UNIQUE sur la colonne age, puis:
LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
Une approche consiste à utiliser une table temporaire. Téléchargez-le et utilisez SQL pour mettre à jour tbl_member à partir d'une table temporaire.
INSERT INTO tbl_member
SELECT Field1,Field2,Field3,...
FROM temp_table
WHERE NOT EXISTS(SELECT *
FROM tbl_member
WHERE (temp_table.Field1=tbl_member.Field1 and
temp_table.Field2=tbl_member.Field2...etc.)
)
Vous pouvez créer un index unique sur plusieurs colonnes. LOAD DATA n'insère pas de lignes qui correspondent aux lignes existantes sur toutes ces colonnes.
par exemple . ALTER TABLE tbl_member ADD UNIQUE unique_index (nom, âge)