Bonsoir,
le titre de la précédente discussion convient encore mais je préfère en créer une nouvelle plutôt que de réactiver l'autre.
Le contexte est le même : je lis un fichier CSV (donc N enregistrements) et à chaque ligne, j'alimente un tableau des requêtes SQL (INSERT ou UPDATE) à exécuter mais j'attends la fin pour les exécuter car je ne veux le faire que si aucune erreur n'a été trouvée (ne pas polluer la bdd avec des données erronées). Le critère pour décider entre un INSERT ou UPDATE est si la clé primaire est déjà présente en bdd ou non (je pense).
Pour être plus clair dans la suite, je vais préciser que l'une des colonnes du CSV est "applicationname" et que j'ai une table application dans laquelle je vais mettre toutes les applications.
Supposons qu'au départ, la bdd est vide. A la première ligne lue du CSV, je vais donc décider de faire un INSERT d'une nouvelle application. Supposons aussi que chaque ligne du CSV porte sur la même application. A la 2e ligne lue, je vais donc retrouver la même application. Mais comme elle n'est pas encore en bdd, je vais de nouveau décider de faire un INSERT. Donc si les N enregistrements du CSV portent sur la même application, ça fera N INSERT identiques. A moins, je pense de faire des INSERT IGNORE. Cela permettra de faire un seul INSERT. Mais je souhaite aussi compter le nombre de INSERT (et de UPDATE). Quand je vais exécuter le INSERT IGNORE, aurai-je l'information s'il y a eu INSERT ou non ?
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE `application` ( `application_key` smallint NOT NULL AUTO_INCREMENT, `application_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `platform` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `platform_owner` bigint DEFAULT NULL, `publisher` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`application_key`), UNIQUE KEY `UK_appli_name` (`application_name`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Partager