Azure Database for MySQL: Verwenden von Go zum Herstellen einer Verbindung und Abfragen von DatenAzure Database for MySQL: Use Go language to connect and query data

In dieser Schnellstartanleitung erfahren Sie, wie Sie unter Windows, Linux (Ubuntu) und macOS (Apple) mithilfe von Code in der Programmiersprache Go eine Verbindung mit einer Azure Database for MySQL-Instanz herstellen.This quickstart demonstrates how to connect to an Azure Database for MySQL from Windows, Ubuntu Linux, and Apple macOS platforms by using code written in the Go language. Es wird veranschaulicht, wie Sie SQL-Anweisungen zum Abfragen, Einfügen, Aktualisieren und Löschen von Daten in der Datenbank verwenden.It shows how to use SQL statements to query, insert, update, and delete data in the database. Bei den Schritten in diesem Artikel wird davon ausgegangen, dass Sie mit der Go-Entwicklung vertraut sind und noch keine Erfahrung mit Azure Database for MySQL haben.This topic assumes that you are familiar with development using Go and that you are new to working with Azure Database for MySQL.

VoraussetzungenPrerequisites

In diesem Schnellstart werden die Ressourcen, die in den folgenden Anleitungen erstellt wurden, als Startpunkt verwendet:This quickstart uses the resources created in either of these guides as a starting point:

Installieren von Go und dem MySQL-ConnectorInstall Go and MySQL connector

Installieren Sie auf Ihrem Computer Go und den „go-sql“-Treiber für MySQL.Install Go and the go-sql-driver for MySQL on your own computer. Führen Sie je nach Plattform die folgenden Schritte im entsprechenden Abschnitt aus:Depending on your platform, follow the steps in the appropriate section:

WindowsWindows

  1. Laden Sie Go für Microsoft Windows herunter, und installieren Sie es gemäß der Installationsanleitung.Download and install Go for Microsoft Windows according to the installation instructions.

  2. Starten Sie die Eingabeaufforderung über das Startmenü.Launch the command prompt from the start menu.

  3. Erstellen Sie einen Ordner für Ihr Projekt. Beispiel:Make a folder for your project such. mkdir %USERPROFILE%\go\src\mysqlgo.mkdir %USERPROFILE%\go\src\mysqlgo.

  4. Wechseln Sie zum Projektordner. Beispiel: cd %USERPROFILE%\go\src\mysqlgo.Change directory into the project folder, such as cd %USERPROFILE%\go\src\mysqlgo.

  5. Legen Sie die Umgebungsvariable für GOPATH so fest, dass sie auf das Quellcodeverzeichnis verweist.Set the environment variable for GOPATH to point to the source code directory. set GOPATH=%USERPROFILE%\go.set GOPATH=%USERPROFILE%\go.

  6. Führen Sie den Befehl go get github.com/go-sql-driver/mysql aus, um den Go-SQL-Treiber für MySQL zu installieren.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    Zusammenfassung: Installieren Sie Go, und führen Sie anschließend an der Eingabeaufforderung die folgenden Befehle aus:In summary, install Go, then run these commands in the command prompt:

    mkdir  %USERPROFILE%\go\src\mysqlgo
    cd %USERPROFILE%\go\src\mysqlgo
    set GOPATH=%USERPROFILE%\go
    go get github.com/go-sql-driver/mysql
    

Linux (Ubuntu)Linux (Ubuntu)

  1. Starten Sie die Bash-Shell.Launch the Bash shell.

  2. Führen Sie sudo apt-get install golang-go aus, um Go zu installieren.Install Go by running sudo apt-get install golang-go.

  3. Erstellen Sie in Ihrem Basisverzeichnis einen Ordner für Ihr Projekt. Beispiel: mkdir -p ~/go/src/mysqlgo/.Make a folder for your project in your home directory, such as mkdir -p ~/go/src/mysqlgo/.

  4. Wechseln Sie zu dem Ordner. Beispiel: cd ~/go/src/mysqlgo/.Change directory into the folder, such as cd ~/go/src/mysqlgo/.

  5. Legen Sie die GOPATH-Umgebungsvariable so fest, dass sie auf ein gültiges Quellverzeichnis verweist (beispielsweise auf den Go-Ordner Ihres aktuellen Basisverzeichnisses).Set the GOPATH environment variable to point to a valid source directory, such as your current home directory's go folder. Führen Sie in der Bash-Shell export GOPATH=~/go aus, um das Go-Verzeichnis als GOPATH für die aktuelle Shellsitzung hinzuzufügen.At the Bash shell, run export GOPATH=~/go to add the go directory as the GOPATH for the current shell session.

  6. Führen Sie den Befehl go get github.com/go-sql-driver/mysql aus, um den Go-SQL-Treiber für MySQL zu installieren.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    Zusammenfassung: Führen Sie die folgenden Bash-Befehle aus:In summary, run these bash commands:

    sudo apt-get install golang-go
    mkdir -p ~/go/src/mysqlgo/
    cd ~/go/src/mysqlgo/
    export GOPATH=~/go/
    go get github.com/go-sql-driver/mysql
    

macOS (Apple)Apple macOS

  1. Laden Sie Go gemäß der Installationsanleitung für Ihre Plattform herunter, und führen Sie die Installation durch.Download and install Go according to the installation instructions matching your platform.

  2. Starten Sie die Bash-Shell.Launch the Bash shell.

  3. Erstellen Sie in Ihrem Basisverzeichnis einen Ordner für Ihr Projekt. Beispiel: mkdir -p ~/go/src/mysqlgo/.Make a folder for your project in your home directory, such as mkdir -p ~/go/src/mysqlgo/.

  4. Wechseln Sie zu dem Ordner. Beispiel: cd ~/go/src/mysqlgo/.Change directory into the folder, such as cd ~/go/src/mysqlgo/.

  5. Legen Sie die GOPATH-Umgebungsvariable so fest, dass sie auf ein gültiges Quellverzeichnis verweist (beispielsweise auf den Go-Ordner Ihres aktuellen Basisverzeichnisses).Set the GOPATH environment variable to point to a valid source directory, such as your current home directory's go folder. Führen Sie in der Bash-Shell export GOPATH=~/go aus, um das Go-Verzeichnis als GOPATH für die aktuelle Shellsitzung hinzuzufügen.At the Bash shell, run export GOPATH=~/go to add the go directory as the GOPATH for the current shell session.

  6. Führen Sie den Befehl go get github.com/go-sql-driver/mysql aus, um den Go-SQL-Treiber für MySQL zu installieren.Install the go-sql-driver for mysql by running the go get github.com/go-sql-driver/mysql command.

    Zusammenfassung: Installieren Sie Go, und führen Sie anschließend die folgenden Bash-Befehle aus:In summary, install Go, then run these bash commands:

    mkdir -p ~/go/src/mysqlgo/
    cd ~/go/src/mysqlgo/
    export GOPATH=~/go/
    go get github.com/go-sql-driver/mysql
    

Abrufen von VerbindungsinformationenGet connection information

Rufen Sie die Verbindungsinformationen ab, die zum Herstellen einer Verbindung mit der Azure SQL-Datenbank für MySQL erforderlich sind.Get the connection information needed to connect to the Azure Database for MySQL. Sie benötigen den vollqualifizierten Servernamen und die Anmeldeinformationen.You need the fully qualified server name and login credentials.

  1. Melden Sie sich beim Azure-Portalan.Log in to the Azure portal.
  2. Klicken Sie im Azure-Portal im linken Menü auf Alle Ressourcen, und suchen Sie dann nach dem soeben erstellten Server, z.B. mydemoserver.From the left-hand menu in Azure portal, click All resources, and then search for the server you have created (such as mydemoserver).
  3. Klicken Sie auf den Servernamen.Click the server name.
  4. Notieren Sie sich im Bereich Übersicht des Servers den Servernamen und den Anmeldenamen des Serveradministrators.From the server's Overview panel, make a note of the Server name and Server admin login name. Wenn Sie Ihr Kennwort vergessen haben, können Sie es in diesem Bereich auch zurücksetzen.If you forget your password, you can also reset the password from this panel. Servername für Azure-Datenbank für MySQLAzure Database for MySQL server name

Erstellen und Ausführen von Go-CodeBuild and run Go code

  1. Golang-Code kann in einem einfachen Text-Editor wie dem Editor (Microsoft Windows), vi oder Nano (Ubuntu) oder TextEdit (macOS) geschrieben werden.To write Golang code, you can use a simple text editor, such as Notepad in Microsoft Windows, vi or Nano in Ubuntu, or TextEdit in macOS. Falls Sie eine umfangreichere interaktive Entwicklungsumgebung (Interactive Development Environment, IDE) bevorzugen, können Sie Gogland von Jetbrains, Visual Studio Code von Microsoft oder Atom verwenden.If you prefer a richer Interactive Development Environment (IDE), try Gogland by Jetbrains, Visual Studio Code by Microsoft, or Atom.
  2. Fügen Sie den Go-Code aus den Abschnitten weiter unten in Textdateien ein, und speichern Sie sie in Ihrem Projektordner mit der Dateierweiterung „*.go“ – beispielsweise %USERPROFILE%\go\src\mysqlgo\createtable.go (Windows-Pfad) oder ~/go/src/mysqlgo/createtable.go (Linux-Pfad).Paste the Go code from the sections below into text files, and then save them into your project folder with file extension *.go (such as Windows path %USERPROFILE%\go\src\mysqlgo\createtable.go or Linux path ~/go/src/mysqlgo/createtable.go).
  3. Suchen Sie im Code nach den Konstanten HOST, DATABASE, USER und PASSWORD, und ersetzen Sie dann die Beispielwerte durch Ihre eigenen Werte.Locate the HOST, DATABASE, USER, and PASSWORD constants in the code, and then replace the example values with your own values.
  4. Starten Sie die Eingabeaufforderung oder Bash-Shell.Launch the command prompt or Bash shell. Wechseln Sie in das Verzeichnis Ihres Projektordners.Change directory into your project folder. Beispiel für Windows: cd %USERPROFILE%\go\src\mysqlgo\.For example, on Windows cd %USERPROFILE%\go\src\mysqlgo\. Beispiel für Linux: cd ~/go/src/mysqlgo/.On Linux cd ~/go/src/mysqlgo/. Einige der genannten IDE-Editoren bieten Debug- und Laufzeitfunktionen ohne Shell-Befehle.Some of the IDE editors mentioned offer debug and runtime capabilities without requiring shell commands.
  5. Geben Sie den Befehl go run createtable.go ein, um den Code auszuführen und die Anwendung zu kompilieren und auszuführen.Run the code by typing the command go run createtable.go to compile the application and run it.
  6. Falls Sie aus dem Code eine native Anwendung erstellen möchten, führen Sie stattdessen go build createtable.go aus, und starten Sie anschließend createtable.exe, um die Anwendung auszuführen.Alternatively, to build the code into a native application, go build createtable.go, then launch createtable.exe to run the application.

Herstellen der Verbindung, Erstellen der Tabelle und Einfügen von DatenConnect, create table, and insert data

Verwenden Sie den folgenden Code, um eine Verbindung mit dem Server herzustellen, eine Tabelle zu erstellen und die Daten unter Verwendung einer SQL-Anweisung des Typs INSERT zu laden.Use the following code to connect to the server, create a table, and load the data by using an INSERT SQL statement.

Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure Database for MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode.The code calls method sql.Open() to connect to Azure Database for MySQL, and it checks the connection by using method db.Ping(). Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt.A database handle is used throughout, holding the connection pool for the database server. Der Code ruft mehrmals die Exec()-Methode auf, um mehrere DDL-Befehle auszuführen.The code calls the Exec() method several times to run several DDL commands. Außerdem verwendet der Code die Methoden Prepare() und „Exec()“, um vorbereitete Anweisungen mit unterschiedlichen Parametern auszuführen und drei Zeilen einzufügen.The code also uses Prepare() and Exec() to run prepared statements with different parameters to insert three rows. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.Each time, a custom checkError() method is used to check if an error occurred and panic to exit.

Ersetzen Sie die Konstanten host, database, user und password durch Ihre eigenen Werte.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

const (
    host     = "mydemoserver.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@mydemoserver"
    password = "yourpassword"
)

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

func main() {

    // Initialize connection string.
    var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

    // Initialize connection object.
    db, err := sql.Open("mysql", connectionString)
    checkError(err)
    defer db.Close()

    err = db.Ping()
    checkError(err)
    fmt.Println("Successfully created connection to database.")

    // Drop previous table of same name if one exists.
    _, err = db.Exec("DROP TABLE IF EXISTS inventory;")
    checkError(err)
    fmt.Println("Finished dropping table (if existed).")

    // Create table.
    _, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
    checkError(err)
    fmt.Println("Finished creating table.")

    // Insert some data into table.
    sqlStatement, err := db.Prepare("INSERT INTO inventory (name, quantity) VALUES (?, ?);")
    res, err := sqlStatement.Exec("banana", 150)
    checkError(err)
    rowCount, err := res.RowsAffected()
    fmt.Printf("Inserted %d row(s) of data.\n", rowCount)

    res, err = sqlStatement.Exec("orange", 154)
    checkError(err)
    rowCount, err = res.RowsAffected()
    fmt.Printf("Inserted %d row(s) of data.\n", rowCount)

    res, err = sqlStatement.Exec("apple", 100)
    checkError(err)
    rowCount, err = res.RowsAffected()
    fmt.Printf("Inserted %d row(s) of data.\n", rowCount)
    fmt.Println("Done.")
}

Lesen von DatenRead data

Verwenden Sie den folgenden Code, um die Daten mit einer SQL-Anweisung des Typs SELECT zu verbinden und zu lesen.Use the following code to connect and read the data by using a SELECT SQL statement.

Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode.The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt.A database handle is used throughout, holding the connection pool for the database server. Der Code ruft die Query()-Methode auf, um den select-Befehl auszuführen.The code calls the Query() method to run the select command. Anschließend wird Next() ausgeführt, um das Resultset zu durchlaufen, und Scan(), um die Spaltenwerte zu analysieren und den Wert in Variablen zu speichern.Then it runs Next() to iterate through the result set and Scan() to parse the column values, saving the value into variables. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Ersetzen Sie die Konstanten host, database, user und password durch Ihre eigenen Werte.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

const (
    host     = "mydemoserver.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@mydemoserver"
    password = "yourpassword"
)

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

func main() {

    // Initialize connection string.
    var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

    // Initialize connection object.
    db, err := sql.Open("mysql", connectionString)
    checkError(err)
    defer db.Close()

    err = db.Ping()
    checkError(err)
    fmt.Println("Successfully created connection to database.")

    // Variables for printing column data when scanned.
    var (
        id       int
        name     string
        quantity int
    )

    // Read some data from the table.
    rows, err := db.Query("SELECT id, name, quantity from inventory;")
    checkError(err)
    defer rows.Close()
    fmt.Println("Reading data:")
    for rows.Next() {
        err := rows.Scan(&id, &name, &quantity)
        checkError(err)
        fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
    }
    err = rows.Err()
    checkError(err)
    fmt.Println("Done.")
}

Aktualisieren von DatenUpdate data

Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und die Daten per UPDATE-SQL-Anweisung zu aktualisieren.Use the following code to connect and update the data using a UPDATE SQL statement.

Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode.The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt.A database handle is used throughout, holding the connection pool for the database server. Der Code ruft die Exec()-Methode auf, um den update-Befehl auszuführen.The code calls the Exec() method to run the update command. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Ersetzen Sie die Konstanten host, database, user und password durch Ihre eigenen Werte.Replace the host, database, user, and password constants with your own values.

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

const (
    host     = "mydemoserver.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@mydemoserver"
    password = "yourpassword"
)

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

func main() {

    // Initialize connection string.
    var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

    // Initialize connection object.
    db, err := sql.Open("mysql", connectionString)
    checkError(err)
    defer db.Close()

    err = db.Ping()
    checkError(err)
    fmt.Println("Successfully created connection to database.")

    // Modify some data in table.
    rows, err := db.Exec("UPDATE inventory SET quantity = ? WHERE name = ?", 200, "banana")
    checkError(err)
    rowCount, err := rows.RowsAffected()
    fmt.Printf("Deleted %d row(s) of data.\n", rowCount)
    fmt.Println("Done.")
}

Löschen von DatenDelete data

Verwenden Sie den folgenden Code, um eine Verbindung herzustellen und die Daten mithilfe einer SQL-Anweisung vom Typ DELETE zu entfernen.Use the following code to connect and remove data using a DELETE SQL statement.

Der Code importiert drei Pakete: das SQL-Paket, den Go-SQL-Treiber für MySQL als Treiber für die Kommunikation mit der Azure-Datenbank für MySQL und das FMT-Paket für Ein- und Ausgaben in der Befehlszeile.The code imports three packages: the sql package, the go sql driver for mysql as a driver to communicate with the Azure Database for MySQL, and the fmt package for printed input and output on the command line.

Der Code ruft die sql.Open()-Methode auf, um eine Verbindung mit Azure-Datenbank für MySQL herzustellen, und überprüft die Verbindung mit der db.Ping()-Methode.The code calls method sql.Open() to connect to Azure Database for MySQL, and checks the connection using method db.Ping(). Ein Datenbankhandle wird durchgängig für den Verbindungspool des Datenbankservers eingesetzt.A database handle is used throughout, holding the connection pool for the database server. Der Code ruft die Exec()-Methode auf, um den delete-Befehl auszuführen.The code calls the Exec() method to run the delete command. Dabei wird jedes Mal mit einer benutzerdefinierten checkError()-Methode überprüft, ob ein Fehler aufgetreten ist, und der Vorgang ggf. mithilfe von „panic“ beendet.Each time a custom checkError() method is used to check if an error occurred and panic to exit.

Ersetzen Sie die Konstanten host, database, user und password durch Ihre eigenen Werte.Replace the host, database, user, and password constants with your own values.

package main

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

const (
    host     = "mydemoserver.mysql.database.azure.com"
    database = "quickstartdb"
    user     = "myadmin@mydemoserver"
    password = "yourpassword"
)

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

func main() {

    // Initialize connection string.
    var connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true", user, password, host, database)

    // Initialize connection object.
    db, err := sql.Open("mysql", connectionString)
    checkError(err)
    defer db.Close()

    err = db.Ping()
    checkError(err)
    fmt.Println("Successfully created connection to database.")

    // Modify some data in table.
    rows, err := db.Exec("DELETE FROM inventory WHERE name = ?", "orange")
    checkError(err)
    rowCount, err := rows.RowsAffected()
    fmt.Printf("Deleted %d row(s) of data.\n", rowCount)
    fmt.Println("Done.")
}

Nächste SchritteNext steps