Rychlý start: Připojení a dotazování dat ve službě Azure Database for MySQL pomocí jazyka Go

PLATÍ PRO: Jednoúčelový server Azure Database for MySQL

Důležité

Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?

Tento rychlý start ukazuje, jak se připojit ke službě Azure Database for MySQL z platforem Windows, Ubuntu Linux a Apple macOS pomocí kódu napsaného v jazyce Go. Ukazuje, jak pomocí příkazů jazyka SQL dotazovat, vkládat, aktualizovat a odstraňovat data v databázi. Toto téma předpokládá, že máte zkušenosti s vývojem pomocí jazyka Go a teprve začínáte pracovat se službou Azure Database for MySQL.

Požadavky

Tento rychlý start jako výchozí bod využívá prostředky vytvořené v některém z těchto průvodců:

Důležité

Ujistěte se, že ip adresa, ze které se připojujete, byla přidána pravidla brány firewall serveru pomocí webu Azure Portal nebo Azure CLI.

Instalace jazyka Go a konektoru MySQL

Nainstalujte na svém počítači jazyk Go a ovladač go-sql-driver for MySQL. V závislosti na vaší platformě postupujte podle kroků v příslušné části:

  1. Stáhněte a nainstalujte jazyk Go pro Microsoft Windows podle pokynů k instalaci.

  2. Z nabídky Start spusťte příkazový řádek.

  3. Vytvořte složku pro váš projekt, například: mkdir %USERPROFILE%\go\src\mysqlgo.

  4. Změňte adresář na složku projektu, například cd %USERPROFILE%\go\src\mysqlgo.

  5. Nastavte proměnnou prostředí GOPATH tak, aby odkazovala na adresář se zdrojovým kódem. set GOPATH=%USERPROFILE%\go.

  6. Nainstalujte ovladač go-sql-driver for mysql spuštěním příkazugo get github.com/go-sql-driver/mysql.

    Stručně řečeno, nainstalujte jazyk Go a potom na příkazovém řádku spusťte následující příkazy:

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

Získání informací o připojení

Získejte informace o připojení potřebné pro připojení ke službě Azure Database for MySQL. Potřebujete plně kvalifikovaný název serveru a přihlašovací údaje.

  1. Přihlaste se k webu Azure Portal.
  2. V nabídce vlevo na webu Azure Portal klikněte na Všechny prostředky a vyhledejte vytvořený server (například mydemoserver).
  3. Klikněte na název serveru.
  4. Na panelu Přehled serveru si poznamenejte Název serveru a Přihlašovací jméno správce serveru. Pokud zapomenete své heslo, můžete ho na tomto panelu také resetovat.

Sestavení a spuštění kódu jazyka Go

  1. K psaní kódu jazyka Go můžete použít jednoduchý textový editor, jako je Poznámkový blok v systému Microsoft Windows, vi nebo Nano v systému Ubuntu nebo TextEdit v systému macOS. Pokud dáváte přednost bohatšímu integrovanému vývojovému prostředí (IDE), vyzkoušejte Gogland od JetBrains, Visual Studio Code od Microsoftu nebo Atom.
  2. Vložte kód Go z níže uvedených částí do textových souborů a uložte je do složky projektu s příponou *.go (například cesta k %USERPROFILE%\go\src\mysqlgo\createtable.go Windows nebo cesta ~/go/src/mysqlgo/createtable.gok Linuxu).
  3. Vyhledejte v kódu konstanty HOST, DATABASE, USER a PASSWORD a příklady hodnot nahraďte vlastními hodnotami.
  4. Spusťte příkazový řádek nebo prostředí Bash. Změňte adresář na složku vašeho projektu. Například ve Windows pomocí příkazu cd %USERPROFILE%\go\src\mysqlgo\. V Linuxu pomocí příkazu cd ~/go/src/mysqlgo/. Některá ze zmíněných integrovaných vývojových prostředí (IDE) nabízejí možnosti ladění a modulu runtime, které nevyžadují příkazy prostředí.
  5. Spusťte kód zadáním příkazu go run createtable.go, který aplikaci zkompiluje a spustí.
  6. Alternativně, pokud z kódu chcete sestavit nativní aplikaci, spusťte příkaz go build createtable.go a pak aplikaci spusťte pomocí souboru createtable.exe.

Připojení, vytvoření tabulky a vložení dat

Pomocí následujícího kódu se připojte k serveru, vytvořte tabulku a nahrajte data s využitím příkazu INSERT jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček go sql driver for mysql jako ovladač pro komunikaci se službou Azure Database for MySQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení ke službě Azure Database for MySQL a pomocí metody db.Ping() zkontroluje stav připojení. Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód několikrát volá metodu Exec() pro spuštění několika příkazů jazyka DDL. Kód také pomocí metod Prepare() a Exec() spouští připravené příkazy s různými parametry pro vložení tří řádků. Pokaždé se pomocí vlastní metody checkError() zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, kód se nouzově ukončí.

Nahraďte konstanty host, database, user a password vlastními hodnotami.

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.")
}

Čtení dat

Pomocí následujícího kódu se připojte a načtěte data s využitím příkazu SELECT jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček go sql driver for mysql jako ovladač pro komunikaci se službou Azure Database for MySQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení ke službě Azure Database for MySQL a pomocí metody db.Ping() zkontroluje stav připojení. Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód volá metodu Query() pro spuštění příkazu select. Potom spustí metodu Next() pro iteraci sadou výsledků dotazu a metodu Scan() pro parsování hodnot sloupců a uložení těchto hodnot do proměnných. Pokaždé se pomocí vlastní metody checkError() zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, kód se nouzově ukončí.

Nahraďte konstanty host, database, user a password vlastními hodnotami.

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.")
}

Aktualizace dat

Pomocí následujícího kódu se připojte a aktualizujte data s využitím příkazu UPDATE jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček go sql driver for mysql jako ovladač pro komunikaci se službou Azure Database for MySQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení ke službě Azure Database for MySQL a pomocí metody db.Ping() zkontroluje stav připojení. Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód volá metodu Exec() pro spuštění příkazu update. Pokaždé se pomocí vlastní metody checkError() zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, kód se nouzově ukončí.

Nahraďte konstanty host, database, user a password vlastními hodnotami.

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("Updated %d row(s) of data.\n", rowCount)
	fmt.Println("Done.")
}

Odstranění dat

Pomocí následujícího kódu se připojte a odeberte data s využitím příkazu DELETE jazyka SQL.

Kód importuje tři balíčky: balíček sql, balíček go sql driver for mysql jako ovladač pro komunikaci se službou Azure Database for MySQL a balíček fmt pro tisk vstupů a výstupů na příkazovém řádku.

Kód volá metodu sql.Open() pro připojení ke službě Azure Database for MySQL a pomocí metody db.Ping() zkontroluje stav připojení. Po celou dobu se používá popisovač databáze, který uchovává fond připojení pro databázový server. Kód volá metodu Exec() pro spuštění příkazu delete. Pokaždé se pomocí vlastní metody checkError() zkontroluje, jestli nedošlo k chybě, a pokud k nějaké dojde, kód se nouzově ukončí.

Nahraďte konstanty host, database, user a password vlastními hodnotami.

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.")
}

Vyčištění prostředků

Pokud chcete vyčistit všechny prostředky použité během tohoto rychlého startu, odstraňte skupinu prostředků pomocí následujícího příkazu:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Další kroky