J'essaie d'insérer plusieurs (centaines/milliers) d'enregistrements dans la base de données MySQL. Mon problème est que je ne suis pas vraiment sûr de la meilleure façon de le faire. Exemple:NodeJS - Comment insérer plusieurs lignes dans MySQL
function saveData(data, callback) {
var dataLength = data.length,
saved = [];
for (var i = 0; i < dataLength; i++) {
db.query("INSERT INTO table VALUES (?, ?, ?)", data[i], function(err, res) {
if (err) {
// ...
}
saved.push(res.insertId);
});
}
}
Le problème est que, après toutes les données sont enregistrées (enregistrer [] contient tous les ID) Je dois passer ce tableau à un rappel. Évidemment je ne peux pas le faire immédiatement ... Je dois attendre que toutes les questions soient faites. Les questions: Dois-je utiliser pour la boucle ou est-il préférable de le faire de manière récursive (L'insertion suivante sera appelée après que le précédent est fait), devrais-je vérifier si saved.length === dataLength puis retourner le tableau ou est il y a une meilleure façon de le faire?
aussi longtemps que tout s'en mémoire je ne vois rien de mal à votre solution – soulcheck
Je ne peux pas décider est préférable d'exécuter toutes les requêtes à la fois puis attendez les résultats ou mieux exécuter une seule requête, attendre un résultat et en exécuter un autre. J'utilise la connexion pooling donc la requête va être conn.query (...); – 0101
J'utilise le module node-mysql2. Je pensais que les requêtes à une base de données fonctionne comme asynchrone de sorte que je peux enregistrer (disons) dix rappels à dix attendent juste le résultat. Ai-je tort? – 0101