インターネットとデータ処理技術の継続的な発展に伴い、データベースはデータの保存と管理の中核ツールとしてますます重要な役割を果たしています。最新の Web 開発では、MySQL は最も広く使用されているリレーショナル データベースの 1 つとして、データの保存と管理によく使用されます。 Go 言語は、その効率性、速度、シンプルさから最も人気のあるプログラミング言語の 1 つとなっており、データベース操作に関連する優れたライブラリやフレームワークも多数備えています。では、MySQL データベースと Go 言語でデータクエリを実行するにはどうすればよいでしょうか?この記事では詳しく紹介していきます。
1. Go 言語の基礎
まず、Go 言語の基礎知識を習得する必要があります。 Go 言語は、SQL データベースへのアクセスと操作をサポートする軽量のデータ アクセス レイヤーである、database/sql 標準ライブラリを提供します。 Database/sql パッケージを使用すると、データベース接続、クエリ、更新などの操作を簡単に実行できます。
Go 言語のデータベース/SQL 標準ライブラリを使用したデータ クエリの基本的な手順は次のとおりです。
呼び出しによるsql.Open 関数 データベースへの接続を作成します。この関数には、ドライバー名とデータ ソース名の 2 つのパラメーターが必要です。 MySQL では、ドライバー名は「mysql」です。データ ソース名には、データベースの IP アドレス、ポート、ユーザー名、パスワード、データベース名など、データベースへの接続に必要なすべての情報が含まれています。
サンプル コードは次のとおりです。
import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/my_database") if err != nil { panic(err) } defer db.Close() }
SQL クエリ ステートメントを使用して、実行する操作を定義します。 Go 言語では、? をプレースホルダーとして使用して、クエリ内のパラメーターを置き換えることができます。これらのパラメータはクエリの実行時に自動的に実際の値に置き換えられるため、SQL インジェクション攻撃を防ぎます。
サンプル コードは次のとおりです。
stmt, err := db.Prepare("SELECT * FROM users WHERE age > ?") if err != nil { panic(err) } defer stmt.Close()
stmt.Query 関数または stmt を呼び出して、SQL クエリ ステートメントを実行します。クエリ行関数。 Query 関数は行セット オブジェクトを返します。これを走査して結果セットを取得できます。 QueryRow 関数は、結果セットの単一行のみを返します。
サンプル コードは次のとおりです。
rows, err := stmt.Query(18) if err != nil { panic(err) } defer rows.Close() for rows.Next() { // 处理查询结果 }
rows.Scan 関数または rows.Columns 関数を使用して処理します。クエリの結果。 Scan 関数は現在の行の値を取得して指定された変数に格納します。一方、Columns 関数は結果セットの列名を返します。
サンプル コードは次のとおりです:
var id int var name string err := rows.Scan(&id, &name) if err != nil { panic(err) }
2. MySQL ステートメントの概要
Go 言語の基本知識を理解した後、MySQL の知識も習得する必要があります。発言。 MySQL は、SELECT、INSERT、UPDATE、DELETE などのさまざまなクエリ ステートメントをサポートしています。この記事では、MySQL で最もよく使用されるクエリ ステートメントの 1 つである SELECT クエリ ステートメントを紹介します。
SELECT ステートメントは、1 つ以上のテーブルからデータを選択し、結果セットをクライアントに返すために使用されます。 SELECT ステートメントの一般的な形式は次のとおりです:
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
このうち、列名はクエリ対象の列の名前をカンマで区切って表し、テーブル名はクエリ対象のテーブルの名前を表します。 ; WHERE 句はオプションであり、データのフィルタリングに使用されます。
サンプル コードは次のとおりです。
SELECT id, name, age FROM users WHERE age > 18;
WHERE ステートメントは、指定した条件を満たすデータをテーブルから選択するために使用されます。 WHERE 句には、AND または OR で接続された 1 つ以上の条件を含めることができます。条件は通常、比較演算子 (>、<、=、!= など) および論理演算子 (AND または OR など) を使用して定義されます。
サンプル コードは次のとおりです。
SELECT id, name, age FROM users WHERE age > 18 AND name LIKE '%john%';
ORDER BY ステートメントは、次のいずれかに従って結果セットを並べ替えるために使用されます。さらに指定された列。デフォルトでは、ORDER BY ステートメントは昇順に並べ替えます。
サンプル コードは次のとおりです。
SELECT id, name, age FROM users WHERE age > 18 ORDER BY age DESC;
LIMIT ステートメントは、結果セットで返される行数を制限するために使用されます。 。 OFFSET 句を使用して、どこから戻りを開始するかを指定できます。
サンプル コードは次のとおりです:
SELECT id, name, age FROM users WHERE age > 18 LIMIT 5 OFFSET 10;
3. MySQL クエリに Go 言語を使用します
以下は、ID 1 のユーザーをクエリするために使用される関数の例です。
func getUserByID(db *sql.DB) (User, error) { var user User err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", 1).Scan(&user.ID, &user.Name, &user.Age) if err != nil { return User{}, err } return user, nil }
この関数例では、QueryRow 関数を呼び出して ID 1 のユーザーをクエリします。 QueryRow 関数は結果セットから 1 行のみを返すため、Scan 関数を使用して結果を User 構造体に保存できます。
次は、18 歳以上のすべてのユーザーをクエリする関数の例です:
func getUsersByAge(db *sql.DB, age int) ([]User, error) { var users []User rows, err := db.Query("SELECT id, name, age FROM users WHERE age > ?", age) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Age) if err != nil { return nil, err } users = append(users, user) } return users, nil }
この関数例では、 Query 関数を呼び出して 18 歳以上のすべてのユーザーをクエリし、行セットを走査してすべての結果を取得します。行セットを反復処理すると、Scan 関数を介して結果が User 構造に保存され、users スライスに追加されます。
4. 概要
この記事では、Go 言語を使用して MySQL データをクエリする方法を紹介しました。最初に Go 言語の基本知識を紹介し、次に MySQL で一般的に使用されるクエリ ステートメントを説明し、最後にサンプル コードを使用して Go 言語を使用して MySQL クエリを実行する方法を示しました。
上記のサンプル コードは基本的なクエリ操作にすぎないことに注意してください。実際の開発では、特定のニーズやシナリオに応じて、さまざまなクエリ ステートメントとアプリケーション モデルを使用する必要があります。同時に、クエリ ステートメントのパフォーマンスも考慮する必要があり、インデックスなどの最適化手法を使用してクエリのパフォーマンスを向上させる必要があります。
以上がMySQL データベースと Go 言語: データ クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。