Maison > développement back-end > Golang > Comment puis-je exécuter plusieurs instructions SQL dans une seule chaîne avec les pilotes MySQL de Go ?

Comment puis-je exécuter plusieurs instructions SQL dans une seule chaîne avec les pilotes MySQL de Go ?

Patricia Arquette
Libérer: 2024-11-27 11:54:09
original
765 Les gens l'ont consulté

How Can I Execute Multiple SQL Statements in a Single String with Go's MySQL Drivers?

Instructions multiples avec le pilote Go MySQL

Dans Go, l'exécution de plusieurs instructions SQL dans une seule chaîne peut être difficile. Cet article examine les pilotes MySQL disponibles pour Go et étudie leur prise en charge de cette fonctionnalité.

Go-MySQL-Driver

Le pilote MySQL le plus populaire de Go est go-sql -pilote/mysql. Cependant, sa configuration par défaut ne prend pas en charge plusieurs instructions dans une seule chaîne. Cela est évident dans l'exemple de code fourni dans la question, où les deux pilotes produisent des erreurs lors de la tentative d'exécution de plusieurs instructions.

Personnalisation de la configuration

Heureusement, go-sql- driver/mysql permet la personnalisation des paramètres de connexion. En définissant le paramètre multiStatements sur true, le pilote peut être configuré pour accepter plusieurs instructions dans une seule chaîne.

package main

import (
    "database/sql"
    "log"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@(127.0.0.1:3306)/?multiStatements=true")
    if err != nil {
        log.Println(err)
    }

    sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;"
    _, err = db.Exec(sql)
    if err != nil {
        log.Println(err)
    }

    db.Close()
}
Copier après la connexion

Avec cette modification, le code exécutera désormais avec succès les deux instructions SQL sans erreur.

Pilote alternatif

Une autre option consiste à utiliser le pilote github.com/ziutek/mymysql, qui ne nécessitent une configuration spéciale pour exécuter plusieurs instructions.

package main

import (
    "database/sql"
    "log"
    _ "github.com/ziutek/mymysql/godrv"
)

func main() {
    db, err := sql.Open("mymysql", "database/user/password")
    if err != nil {
        log.Println(err)
    }

    sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;"
    _, err = db.Exec(sql)
    if err != nil {
        log.Println(err)
    }

    db.Close()
}
Copier après la connexion

Bien que ce pilote prenne en charge plusieurs instructions, il est important de noter qu'il n'est peut-être pas aussi largement utilisé ou activement maintenu que d'autres options.

Remarque sur la prudence

La documentation MySQL met en garde contre l'exécution de plusieurs instructions dans une seule chaîne, car cela peut introduire des erreurs subtiles et affecter les performances. Il est généralement recommandé d’utiliser plutôt des procédures stockées ou des instructions préparées. Néanmoins, la possibilité d'exécuter plusieurs instructions dans une seule chaîne peut être bénéfique dans certains scénarios, tels que la restauration d'une base de données à partir de dumps SQL.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal