Szybki start: nawiązywanie połączeń i wykonywanie zapytań dotyczących danych w usłudze Azure Database for MySQL przy użyciu języka Go

DOTYCZY: Azure Database for MySQL — pojedynczy serwer

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

Ten przewodnik Szybki start przedstawia sposób nawiązywania połączeń z usługą Azure Database for MySQL przy użyciu kodu napisanego w języku Go na platformach Windows, Ubuntu Linux i Apple macOS. Pokazano w nim, jak używać instrukcji języka SQL w celu wysyłania zapytań o dane oraz wstawiania, aktualizowania i usuwania danych w bazie danych. W tym temacie założono, że wiesz już, jak opracowywać zawartość za pomocą języka Go, i dopiero zaczynasz pracę z usługą Azure Database for MySQL.

Wymagania wstępne

Ten przewodnik Szybki start jako punktu wyjścia używa zasobów utworzonych w jednym z tych przewodników:

Ważne

Upewnij się, że adres IP, z którego nawiązujesz połączenie, został dodany reguł zapory serwera przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure

Instalowanie środowiska języka Go i łącznika bazy danych MySQL

Zainstaluj środowisko języka Go i sterownik go-sql-driver dla bazy danych MySQL na swoim komputerze. W zależności od używanej platformy wykonaj kroki w odpowiedniej sekcji:

  1. Pobierz i zainstaluj środowisko języka Go dla systemu Microsoft Windows zgodnie z instrukcjami dotyczącymi instalacji.

  2. Uruchom wiersz polecenia z menu Start.

  3. Utwórz folder dla projektu, np. mkdir %USERPROFILE%\go\src\mysqlgo.

  4. Przejdź do folderu projektu, np. cd %USERPROFILE%\go\src\mysqlgo.

  5. Ustaw zmienną środowiskową GOPATH, aby wskazywała katalog kodu źródłowego. set GOPATH=%USERPROFILE%\go.

  6. Zainstaluj sterownik go-sql-driver dla bazy danych MySQL, uruchamiając polecenie go get github.com/go-sql-driver/mysql.

    Podsumowując: zainstaluj środowisko języka Go, a następnie uruchom następujące polecenia w wierszu polecenia:

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

Pobieranie informacji o połączeniu

Pobierz informacje o połączeniu potrzebne do nawiązania połączenia z usługą Azure Database for MySQL. Potrzebna jest w pełni kwalifikowana nazwa serwera i poświadczenia logowania.

  1. Zaloguj się w witrynie Azure Portal.
  2. W menu po lewej stronie w witrynie Azure Portal kliknij pozycję Wszystkie zasoby i wyszukaj utworzony serwer, taki jak mydemoserver.
  3. Kliknij nazwę serwera.
  4. Po przejściu do panelu Przegląd serwera zanotuj nazwę serwera i nazwę logowania administratora serwera. Jeśli zapomnisz hasła, możesz również je zresetować z poziomu tego panelu. Azure Database for MySQL server name

Kompilowanie i uruchamianie kodu języka Go

  1. Do pisania kodu w języku Golang można użyć prostego edytora tekstów, takiego jak Notatnik w systemie Microsoft Windows, vi lub Nano w systemie Ubuntu lub TextEdit w systemie macOS. Jeśli wolisz bardziej zaawansowane środowisko IDE, wypróbuj rozwiązanie Gogland firmy Jetbrains, edytor Visual Studio Code firmy Microsoft lub Atom.
  2. Wklej kod Języka Go z poniższych sekcji do plików tekstowych, a następnie zapisz je w folderze projektu z rozszerzeniem pliku *.go (np. ścieżką %USERPROFILE%\go\src\mysqlgo\createtable.go systemu Windows lub ścieżką systemu ~/go/src/mysqlgo/createtable.goLinux).
  3. Zlokalizuj zmienne HOST, DATABASE, USER i PASSWORD w kodzie i zastąp przykładowe wartości wybranymi samodzielnie wartościami.
  4. Uruchom wiersz polecenia lub powłokę bash. Przejdź do folderu projektu. Na przykład w systemie Windows uruchom polecenie cd %USERPROFILE%\go\src\mysqlgo\. W systemie Linux: cd ~/go/src/mysqlgo/. Niektóre z wymienionych edytorów IDE oferują możliwości debugowania i uruchamiania bez konieczności używania poleceń powłoki.
  5. Uruchom kod, wpisując polecenie go run createtable.go, aby skompilować aplikację i uruchomić ją.
  6. Alternatywnie, aby skompilować kod w aplikację natywną, uruchom polecenie go build createtable.go, a następnie uruchom plik createtable.exe w celu uruchomienia aplikacji.

Nawiązywanie połączenia, tworzenie tabeli i wstawianie danych

Użyj poniższego kodu, aby nawiązać połączenie z serwerem, utworzyć tabelę i załadować dane przy użyciu instrukcji INSERT języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet go-sql-driver dla bazy danych MySQL jako sterownik do komunikacji z usługą Azure Database for MySQL i pakiet fmt na potrzeby drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open(), aby nawiązać połączenie z usługą Azure Database for MySQL, i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec() kilka razy, aby uruchomić kilka poleceń DDL. Kod używa również metod Prepare() i Exec() w celu uruchomienia przygotowanych instrukcji z różnymi parametrami, aby wstawić trzy wiersze. Za każdym razem jest wywoływana niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy.

Zastąp stałe host, database, user i password własnymi wartościami.

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

Odczyt danych

Użyj poniższego kodu, aby nawiązać połączenie i odczytać dane za pomocą instrukcji SELECT języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet go-sql-driver dla bazy danych MySQL jako sterownik do komunikacji z usługą Azure Database for MySQL i pakiet fmt na potrzeby drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open(), aby nawiązać połączenie z usługą Azure Database for MySQL, i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Query(), aby uruchomić polecenie select. Następnie uruchamia polecenie Next() w celu iterowania przez zestaw wyników i polecenie Scan(), aby przeanalizować wartości kolumn i zapisać wartości w zmiennych. Za każdym razem jest wywoływana niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy.

Zastąp stałe host, database, user i password własnymi wartościami.

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

Aktualizowanie danych

Użyj poniższego kodu, aby nawiązać połączenie i zaktualizować dane za pomocą instrukcji UPDATE języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet go-sql-driver dla bazy danych MySQL jako sterownik do komunikacji z usługą Azure Database for MySQL i pakiet fmt na potrzeby drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open(), aby nawiązać połączenie z usługą Azure Database for MySQL, i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec(), aby uruchomić polecenie update. Za każdym razem jest wywoływana niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy.

Zastąp stałe host, database, user i password własnymi wartościami.

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

Usuwanie danych

Użyj poniższego kodu, aby nawiązać połączenie i usunąć dane za pomocą instrukcji DELETE języka SQL.

Kod importuje trzy pakiety: pakiet sql, pakiet go-sql-driver dla bazy danych MySQL jako sterownik do komunikacji z usługą Azure Database for MySQL i pakiet fmt na potrzeby drukowanych danych wejściowych i wyjściowych w wierszu polecenia.

Kod wywołuje metodę sql.Open(), aby nawiązać połączenie z usługą Azure Database for MySQL, i sprawdza połączenie przy użyciu metody db.Ping(). Używane jest dojście do bazy danych, które utrzymuje pulę połączeń dla serwera bazy danych. Kod wywołuje metodę Exec(), aby uruchomić polecenie delete. Za każdym razem jest wywoływana niestandardowa metoda checkError() w celu sprawdzenia, czy wystąpił błąd, i awaryjnego zakończenia pracy.

Zastąp stałe host, database, user i password własnymi wartościami.

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

Czyszczenie zasobów

Aby wyczyścić wszystkie zasoby używane w tym przewodniku Szybki start, usuń grupę zasobów przy użyciu następującego polecenia:

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

Następne kroki