Maison >développement back-end >Golang >Comment puis-je insérer efficacement plusieurs lignes de données simultanément dans Go à l'aide de SQL ?

Comment puis-je insérer efficacement plusieurs lignes de données simultanément dans Go à l'aide de SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-14 03:52:09947parcourir

How Can I Efficiently Insert Multiple Data Rows Simultaneously in Go Using SQL?

Insertion multi-données efficace dans Go

L'insertion simultanée de plusieurs lignes de données dans SQL peut améliorer considérablement l'efficacité. Dans Go, vous pouvez y parvenir en utilisant l'instruction préparée par SQL et plusieurs valeurs.

Considérez les données suivantes :

data := []map[string]string{
   {"v1":"1", "v2":"1", "v3":"1"},
   {"v1":"2", "v2":"2", "v3":"2"},
   {"v1":"3", "v2":"3", "v3":"3"},
}

Au lieu de parcourir les données et d'exécuter des instructions INSERT individuelles, vous pouvez utiliser une instruction préparée avec les valeurs suivantes :

sqlStr := "INSERT INTO test(n1, n2, n3) VALUES "
vals := []interface{}{}

for _, row := range data {
    sqlStr += "(?, ?, ?),"
    vals = append(vals, row["v1"], row["v2"], row["v3"])
}
//trim the last ,
sqlStr = sqlStr[0:len(sqlStr)-1]

stmt, _ := db.Prepare(sqlStr)
res, _ := stmt.Exec(vals...)

En préparant l'instruction SQL une fois puis en l'exécutant avec toutes les valeurs, vous minimisez la surcharge de créer plusieurs instructions préparées. De plus, l'utilisation de interface{} comme type de vals vous permet d'insérer n'importe quel type de valeur, offrant ainsi de la flexibilité et évitant les conversions de type.

Cette approche est plus efficace et plus sûre que l'utilisation de la concaténation de chaînes pour construire la requête SQL. Les instructions préparées empêchent les vulnérabilités d'injection SQL et améliorent les performances globales de votre code lors de l'insertion simultanée de plusieurs lignes de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn