Maison  >  Article  >  développement back-end  >  Comparaison de l'utilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau)

Comparaison de l'utilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau)

藏色散人
藏色散人avant
2020-09-18 09:15:025261parcourir

La colonne suivante du tutoriel Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)lang vous présentera la comparaison de l'utilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau, j'espère que ce sera le cas). soyez utile aux amis dans le besoin !


Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

La bibliothèque de base de données/sql fournie avec Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) peut communiquer avec n'importe quelle base de données relationnelle afin d'abstraire certains liens vers la base de données et. gérer le pool de connexions La complexité sous-jacente, exposant un peu plus d'API que prévu, conduit finalement à une certaine imagination sur la façon d'utiliser ces API.

Je vais donc essayer d'analyser le comportement d'utilisation des principales précédemment connues API.

J'ai expérimenté une application Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) exécutée sur une machine virtuelle sur la machine hôte (ubuntu) et un serveur mysql.

Requête essayée : insérer dans les articles (nom, prix, description) des valeurs ('brownie',240,'sizzling')

Requête

Chaque fois que nous devons toujours utiliser db.Query lorsque nous faisons select, et nous ne devons jamais nous occuper des lignes renvoyées par Query, mais les parcourir ( sinon nous fera fuir le lien de la base de données )

L'exécution de Query(query) n'utilisera pas d'instructions préparées (voir la capture Wireshark ci-dessous)

  • Note du client Une seule requête TCP envoyée au serveur (moins la connexion)
  • Le lien sera automatiquement libéré dans le pool lors de l'itération sur les lignes renvoyées, ou nous pouvons appeler explicitement rows.Close() une fois terminé
  • Utilisation - db.Query("insérer dans les valeurs des éléments (nom, prix, description)('brownie', 240, 'sizzling')")

Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

Afficher la capture Wireshark (requête)

ExécutionLa requête (queryTemplate, params) utilisera les instructions préparées en coulisses

  • Notez que 3 requêtes TCP ont été envoyées du client au serveur (moins la connexion)
  • Lorsque les lignes renvoyées sont itérées, le lien sera automatiquement libéré vers le pool, ou Nous pouvons appeler explicitement rows.Close() une fois terminé.
  • Utilisation — db.Query("insérer dans les éléments (nom, prix, description) valeurs(?,?,?)", "brownie ", 240, "grésillant")

Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

Capture Wireshark de la requête (requête, paramètres)

Exec

Nous devons toujours utiliser db.Execinsert ou update ou delete 🎜>.

Exécution

Exec(query) n'utilise pas d'instructions préparées, il y a donc moins d'appels TCP vers SQL Server

    Remarque du client au serveur Une seule requête TCP a été envoyé (moins connexion)
  • Libère automatiquement le lien vers le pool.
  • Utilisation —
  • db.Exec("insérer dans les éléments (nom, prix, description) valeurs('brownie ', 240, 'grésillant')")

Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

capture wireshark de Exec(query)

exécution

Exec( queryTemplate, params) utilisera des instructions préparées en arrière-plan, il y aura donc plus d'appels TCP vers SQL Server

    Notez que 3 TCP sont envoyés du client à la requête du serveur (moins). login)
  • Relâchez le lien et revenez automatiquement au pool.
  • Utilisation -
  • db.Exec("insérer dans les éléments (nom, prix, description) valeurs(?,? , ?)", "brownie", 240, "grésillant")

Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

capture Wireshark de Exec (requête, paramètres)

Préparer

Cette méthode ne doit être utilisée que si notre programme doit être préparé une fois au début et exécuté N fois pendant l'exécution du programme.

    Notez qu'il sont 2 requêtes TCP envoyées du client au serveur (sans compter la connexion)
  • Nous devons fermer explicitement la déclaration lorsque nous n'avons pas besoin de la déclaration préparée
  • Sinon, nous ne pourrons pas la publier. le client et les ressources allouées sur le serveur !
  • Utilisation —
  • stmt.Exec("insérer dans les éléments (nom, prix, description) valeurs(?,?,?)", "brownie », 240, « grésillant »)

Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Comparaison de lutilisation de Query, Exec et Prepare dans Go SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau) SQL (avec capture de paquets réseau)

Préparer (interroger) la capture WireShark

Conclusion

Première fois L'une des principales confusions que nous rencontrons lors de l'utilisation du package sql est que nous ne sommes pas conscients qu'il crée des instructions préparées en coulisses, même si nous n'y sommes pas explicitement invités

.

J'espère que les points ci-dessus clarifient quand les déclarations préparées sont invoquées et comment nous pouvons les éviter.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer