ホームページ  >  記事  >  バックエンド開発  >  golangのmysqlクエリ

golangのmysqlクエリ

WBOY
WBOYオリジナル
2023-05-19 13:27:09644ブラウズ

Golang は、大量のデータの処理と高い同時実行パフォーマンスに優れたプログラミング言語として人気が高まっています。同時に、MySQL は一般的なリレーショナル データベース システムとして、Golang と非常に互換性があります。この記事では、Golang で MySQL クエリを実行する方法を説明します。

  1. MySQL ドライバーのインストール

Golang を使用して MySQL にクエリを実行する前に、まず MySQL ドライバーをインストールする必要があります。 Golang で最も一般的に使用される MySQL ドライバーは「mysql」で、次のコマンドでインストールできます。

go get -u github.com/go-sql-driver/mysql

このコマンドは、Golang 環境に mysql ドライバーをインストールします。

  1. MySQL データベースへの接続

MySQL クエリを実行する前に、まずデータベースとの接続を確立する必要があります。次のコードを使用して、MySQL データベースへの接続を確立できます:

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

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
}

上記のコードでは、「sql.Open」関数を使用して、次のパラメータを指定して Golang から MySQL データベースを開きます:

  • 最初のパラメータ: 使用するデータベース ドライバを指定します。ここでは「mysql」です。
  • 2 番目のパラメータ: MySQL データベースの接続情報を指定します。形式は「username:」です。 password@tcp(host :port)/database_name"

    • username: MySQL データベースのユーザー名
    • password: MySQL データベースのパスワード
    • host: port: MySQL データベースのホストとポート No.
    • database_name: MySQL データベースの名前

クエリを実行した後、閉じる必要があります。 「db.Close()」ステートメントによる接続。

  1. SELECT クエリの実行

接続を確立した後、Golang を使用して MySQL クエリを実行できます。以下は、SELECT クエリ ステートメントを実行する簡単なサンプル コードです。

rows, err := db.Query("SELECT name, age FROM users WHERE age > ?", 20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}
  • 「db.Query」関数は、SQL クエリ ステートメントとそのパラメータを受け取り、結果セット
  • ## を返します。 #"rows.Next" はデータの各行をループし、"rows.Scan" 関数はデータの各行をスキャンして変数に入れます
  • クエリが完了したら、"rows.Close" を呼び出す必要があります。結果セットのイテレータを閉じる関数
    INSERT、UPDATE、および DELETE 操作の実行
Golang での INSERT、UPDATE、DELETE およびその他の操作の実行基本的には SELECT 操作を実行するのと同じです。以下はサンプル コードです。

result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", "John", 25)
if err != nil {
    panic(err.Error())
}
lastInsertId, _ := result.LastInsertId()
rowsAffected, _ := result.RowsAffected()
fmt.Printf("LastInsertId: %d, RowsAffected: %d
", lastInsertId, rowsAffected)

    「db.Exec」関数は SQL 操作ステートメントとそのパラメータを MySQL データベースに渡します
  • 「result.LastInsertId()」関数は挿入されたデータを返します 主キー ID
  • 「result.RowsAffected()」関数は影響を受ける行の数を返します
    プリペアド ステートメントの使用
Golang では、準備されたステートメントを使用して MySQL クエリを実行できます。プリペアド ステートメントを使用すると、MySQL サーバーが複数の同一のクエリ ステートメントを実行するときに同じクエリ ステートメントをキャッシュできるため、クエリのパフォーマンスが向上し、SQL ステートメントのコンパイルのオーバーヘッドが軽減されます。次に、プリペアド ステートメントの使用例を示します。

stmt, err := db.Prepare("SELECT name, age FROM users WHERE age > ?")
if err != nil {
    panic(err.Error())
}
defer stmt.Close()

rows, err := stmt.Query(20)
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var name string
    var age int
    err = rows.Scan(&name, &age)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(name, age)
}

    「db.Prepare」関数は、クエリ ステートメントをプリペアド ステートメント オブジェクトにコンパイルします
  • プリペアド オブジェクト内の「?」パラメータのプレースホルダを表すために使用されます
  • 「db.Query」と同様に、「stmt.Query」関数を使用して前処理されたクエリを実行できます
    安全性の考慮
MySQL クエリを作成する場合、セキュリティは非常に重要です。 Golang は、MySQL クエリを使用するためのいくつかのベスト プラクティスを提供します。データベースが公開される可能性があるため、ユーザー入力から保護しないでください。

SQL インジェクション攻撃を防ぐには、入力されたデータをエスケープするかパラメータ化する必要があります。
  • これらのベスト プラクティスにより、SQL インジェクションなどの攻撃のリスクを軽減できます。
  • 結論
  • この記事では、Golang で MySQL クエリを実行する方法について説明しました。基本的な接続方法と構文を理解した後、Golang を使用して MySQL データベースにクエリを実行し、ベスト プラクティスを使用してクエリのセキュリティを確保できます。 MySQL クエリに Golang を使用する場合は、セキュリティの問題を常に念頭に置いてください。

以上がgolangのmysqlクエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。