Hızlı Başlangıç: MySQL için Azure Veritabanı'da verileri bağlamak ve sorgulamak için Go dilini kullanma

ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu

Önemli

MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?

Bu hızlı başlangıçta, Windows, Ubuntu Linux ve Apple macOS platformlarından Go dilinde yazılmış kod kullanarak MySQL için Azure Veritabanı’na nasıl bağlanılacağı gösterilmiştir. Hızlı başlangıçta, veritabanında verileri sorgulamak, eklemek, güncelleştirmek ve silmek için SQL deyimlerinin nasıl kullanılacağı da gösterilmiştir. Bu konuda, Go kullanarak geliştirmeyle ilgili bilgi sahibi olduğunuz ve MySQL için Azure Veritabanı ile çalışmaya yeni başladığınız varsayılır.

Önkoşullar

Bu hızlı başlangıçta, başlangıç noktası olarak şu kılavuzlardan birinde oluşturulan kaynaklar kullanılmaktadır:

Önemli

Bağlandığınız IP adresinin Azure portalı veya Azure CLI kullanılarak sunucunun güvenlik duvarı kurallarına eklendiğinden emin olun

Go ve MySQL bağlayıcısını yükleme

Bilgisayarınıza Go ve go-sql-driver for MySQL'i yükleyin. Platformunuza bağlı olarak, uygun bölümdeki adımları izleyin:

  1. Yükleme yönergelerine uygun olarak Microsoft Windows için Go’yu indirin ve yükleyin.

  2. Başlat menüsünden komut istemini başlatın.

  3. Projeniz için şöyle bir klasör oluşturun. mkdir %USERPROFILE%\go\src\mysqlgo.

  4. Dizini değiştirerek proje klasörünüze geçin; örneğin, cd %USERPROFILE%\go\src\mysqlgo.

  5. GOPATH için ortam değişkenini kaynak kod dizinine işaret edecek şekilde ayarlayın. set GOPATH=%USERPROFILE%\go.

  6. go get github.com/go-sql-driver/mysql komutunu çalıştırarak go-sql-driver for mysql'i yükleyin.

    Özetle, Go’yu yükleyin ve ardından komut isteminde şu komutları çalıştırın:

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

Bağlantı bilgilerini alma

MySQL için Azure Veritabanı'na bağlanmak üzere gereken bağlantı bilgilerini alın. Tam sunucu adına ve oturum açma kimlik bilgilerine ihtiyacınız vardır.

  1. Azure Portal’da oturum açın.
  2. Azure portalında sol taraftaki menüden Tüm kaynaklar'a tıklayın ve oluşturduğunuz sunucuyu (örneğin, mydemoserver) arayın.
  3. Sunucunun adına tıklayın.
  4. Sunucunun Genel Bakış panelinden Sunucu adı ile Sunucu yöneticisi oturum açma adı’nı not alın. Parolanızı unutursanız, bu panelden parolayı da sıfırlayabilirsiniz. Azure Database for MySQL server name

Go kodunu derleme ve çalıştırma

  1. Golang kodlarını yazmak için Microsoft Windows’da Not Defteri , Ubuntu’da VI veya Nano, macOS’da TextEdit gibi basit metin düzenleyicilerini kullanabilirsiniz. Daha zengin bir Tümleşik Geliştirme Ortamı (IDE) tercih ediyorsanız Jetbrains Gogland, Microsoft Visual Studio Code veya Atom kullanmayı deneyebilirsiniz.
  2. Aşağıdaki bölümlerden Go kodunu metin dosyalarına yapıştırın ve ardından *.go dosya uzantısıyla proje klasörünüzde kaydedin (Windows yolu veya Linux yolu %USERPROFILE%\go\src\mysqlgo\createtable.go~/go/src/mysqlgo/createtable.gogibi).
  3. Kodda HOST, DATABASE, USER ve PASSWORD sabitlerini bulun ve daha sonra örnek değerleri kendi değerlerinizle değiştirin.
  4. Komut istemini veya Bash kabuğunu başlatın. Dizini değiştirerek proje klasörünüze geçin. Örneğin; Windows’da cd %USERPROFILE%\go\src\mysqlgo\. Linux'ta cd ~/go/src/mysqlgo/. Belirtilen IDE düzenleyicilerinden bazıları kabuk komutları gerektirmeden hata ayıklama ve çalışma zamanı özellikleri sunar.
  5. Uygulamayı derlemek ve çalıştırmak için go run createtable.go komutunu yazarak kodu çalıştırın.
  6. Alternatif olarak, kodu yerel bir uygulamada derlemek için go build createtable.go komutunu kullanın, ardından uygulamayı çalıştırmak için createtable.exe’yi başlatın.

Bağlanma, tablo oluşturma ve veri ekleme

Sunucuya bağlanmak, tablo oluşturmak ve INSERT SQL deyimini kullanarak verileri yüklemek için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, MySQL için Azure Veritabanı'yla iletişim kuran sürücü olarak go sql driver for mysql ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak MySQL için Azure Veritabanı’na bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, birkaç DDL komutunu çalıştırmak için birkaç kez Exec() yöntemini çağırır. Kod ayrıca, hazırlanmış deyimleri farklı parametrelerle çalıştırıp üç satır eklemek için Prepare() ve Exec() kullanır. Her seferinde hata oluşup olmadığını denetlemek ve acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

host, database, user ve password sabitlerini kendi değerlerinizle değiştirin.

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

Verileri okuma

Bağlanmak ve SELECT SQL deyimi kullanarak verileri okumak için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, MySQL için Azure Veritabanı'yla iletişim kuran sürücü olarak go sql driver for mysql ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak MySQL için Azure Veritabanı’na bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, seçme komutunu çalıştırmak için Query() yöntemini çağırır. Ardından, sonuç kümesi üzerinden yineleme yapmak için Next() ve sütun değerlerini ayrıştırıp değeri değişkenlere kaydetmek için Scan() çalıştırır. Her seferinde hata oluşup olmadığını denetlemek ve acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

host, database, user ve password sabitlerini kendi değerlerinizle değiştirin.

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

Verileri güncelleştirme

UPDATE SQL deyimini kullanarak bağlanmak ve verileri güncelleştirmek için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, MySQL için Azure Veritabanı'yla iletişim kuran sürücü olarak go sql driver for mysql ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak MySQL için Azure Veritabanı’na bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, güncelleştirme komutunu çalıştırmak için Exec() yöntemini çağırır. Her seferinde hata oluşup olmadığını denetlemek ve acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

host, database, user ve password sabitlerini kendi değerlerinizle değiştirin.

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

Veri silme

Bağlanmak ve DELETE SQL deyimini kullanarak verileri kaldırmak için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, MySQL için Azure Veritabanı'yla iletişim kuran sürücü olarak go sql driver for mysql ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak MySQL için Azure Veritabanı’na bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, silme komutunu çalıştırmak için Exec() yöntemini çağırır. Her seferinde hata oluşup olmadığını denetlemek ve acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

host, database, user ve password sabitlerini kendi değerlerinizle değiştirin.

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

Kaynakları temizleme

Bu hızlı başlangıç sırasında kullanılan tüm kaynakları temizlemek için aşağıdaki komutu kullanarak kaynak grubunu silin:

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

Sonraki adımlar