MySQL は非常に人気のあるリレーショナル データベースであり、Go 言語は急速に発展しているプログラミング言語であり、この 2 つを組み合わせると、便利で効率的なデータ抽出を実現できます。この記事では、Go 言語を使用して MySQL データを抽出する方法を紹介します。
1. MySQL ドライバーのインストールと構成
Go 言語を使用して MySQL データを抽出する前に、まず MySQL ドライバーをインストールする必要があります。 MySQL ドライバーには多くの選択肢がありますが、ここでは、最もよく使用される 2 つのドライバー、go-sql-driver と mysql driver を紹介します。
go-sql-driver を使用してインストールします。次のコマンドを使用できます。
go get -u github.com/go-sql-driver/mysql
mysql ドライバを使用してインストールします。次のコマンドを使用できます。
go get -u github.com/mysql/mysql-go
インストールが完了したら、対応するドライバー パッケージをコード内にインポートするだけです (例:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
) ただし、MySQL ドライバーを使用する場合は、MySQL 関連の設定も行う必要があることに注意してください。
MySQL 5.7.7 より前のバージョンでは、デフォルトで utf8 文字セットが使用され、3 バイトのみをサポートします。 5.7 では Unicode 文字が使用されます。バージョン 7 以降では、デフォルトの文字セットは utf8mb4 であり、4 バイトの Unicode 文字をサポートします。設定ファイル my.cnf または my.ini のcharacter-set-server を utf8mb4 に設定できます。中国語などの特殊文字効果をサポートします。
MySQL では、MySQL 上で動作するすべての SQL ステートメントが binlog ログに記録されるため、データを抽出するときは、binlog ログを有効にする必要があります。リアルタイムのデータ同期。 my.cnf または my.ini で構成して有効にすることができます。
2. MySQL データベースへの接続
MySQL ドライバーをインストールし、それに応じて設定した後、MySQL データベースに接続する必要があります。 MySQLデータベースへの接続方法は以下の通りです。
db, err := sql.Open("mysql", "user:password@tcp(ip:port)/database")
このうち、userとpasswordはMySQLのユーザー名とパスワード、ipとportはMySQLの接続アドレスとポート番号、databaseはアクセスするデータベース。
MySQL データベースに正常に接続したら、MySQL のデータを Go 言語で読み取る、または Go 言語のデータを MySQL に保存するなど、対応するデータ操作を実行できます。
3. SQL ステートメントのクエリ
SQL ステートメントを使用して、Go 言語で MySQL のデータをクエリするのは非常に簡単です。 sql.Query 関数を使用してクエリ ステートメントを実行し、次のように結果を rows オブジェクトに保存できます。
rows, err := db.Query("SELECT * FROM table1")
実行が成功したら、rows オブジェクトの Next 関数を使用して結果を走査できます。毎回 1 つのレコードを取り出し、対応する構造体オブジェクトにカプセル化します:
type Product struct { ID int64 `db:"id"` Name string `db:"name"` Price int64 `db:"price"` CreateTime int64 `db:"create_time"` } func main() { rows, err := db.Query("SELECT * FROM product") // 查询product表 if err != nil { panic(err) } defer rows.Close() products := make([]Product, 0) for rows.Next() { // 遍历结果集 var p Product err = rows.Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime) // 将一条记录封装到Product对象中 if err != nil { panic(err) } products = append(products, p) } }
sql.QueryRow 関数を使用して単一のレコードをクエリする方法も非常に簡単です:
var p Product err := db.QueryRow("SELECT * FROM product WHERE id=?", 1).Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime) if err != nil { panic(err) }
4. データの挿入
使用 MySQL へのデータの挿入も、Go 言語を使用すると非常に簡単です。これを実現するには、sql.Exec 関数を使用して SQL ステートメントを実行します。
stmt, err := db.Prepare("INSERT INTO product(name, price) VALUES(?,?)") if err != nil { panic(err) } res, err := stmt.Exec("Product1", 100) if err != nil { panic(err) }
上記のコードの Prepare 関数を使用して SQL ステートメントを準備し、Exec 関数を使用して SQL ステートメントを実行します。そして結果を返します。実行が成功した場合、返される結果には、挿入されたデータ (存在する場合) の ID が含まれます。これは、LastInsertId 関数を使用して取得できます。影響を受ける行の数を取得する必要がある場合は、RowsAffected 関数を使用できます。
5. データの更新と削除
データの挿入と同様に、Go 言語では、次のように sql.Exec 関数を使用して SQL 更新ステートメントと削除ステートメントを実行することもできます。 ## 6. トランザクション管理
データ操作を実行するとき、データのアトミック性、つまりすべてのデータベース操作が成功または失敗することを確認する必要がある場合があります。この時点で、トランザクション管理メカニズムを使用してこれを実現できます。
Go 言語では、db.Begin と tx.Commit を使用して、次のようなトランザクションを開いて送信できます。
// 执行更新操作 stmt, err := db.Prepare("UPDATE product SET price=? WHERE id=?") if err != nil { panic(err) } res, err := stmt.Exec(200, 1) if err != nil { panic(err) } // 执行删除操作 stmt, err = db.Prepare("DELETE FROM product WHERE id=?") if err != nil { panic(err) } res, err = stmt.Exec(1) if err != nil { panic(err) }
上記のコードでは、トランザクションを開いた後、次のことを実行できます。トランザクション SQL 操作内の複数の操作。すべての SQL 操作を実行し、すべての SQL 操作のアトミック性を確認した後、Commit() 関数を使用してトランザクションをコミットする必要があります。 SQL 操作でエラーが発生した場合は、Rollback() 関数を使用してトランザクションをロールバックできます。
7. 結論
この記事では、Go 言語を使用して MySQL データベースからデータを抽出する方法を紹介します。上記の紹介により、Go 言語を使用して MySQL データベース上でデータ操作を実行するのは非常に便利で効率的であることがわかります。データベース操作に Go 言語を使ったことがない方は、ぜひ一度試してみてはいかがでしょうか。
以上がGo言語を使用してMySQLデータベースからデータを抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。