使用 Go 语言连接 MySQL 数据库通常涉及几步简单的配置和编程。以下是详细的步骤,帮助你从安装依赖到进行基本的数据库操作。
首先,你需要安装 MySQL 数据库驱动。推荐使用 go-sql-driver/mysql,这是一个流行且被广泛使用的 MySQL 驱动。
安装驱动:
go get -u github.com/go-sql-driver/mysql
确保你已经在 MySQL 中创建了数据库,并且有一个可以用来连接的账户。
- CREATE DATABASE mydb;
- CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
- GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
- FLUSH PRIVILEGES;
编写一个简单的 Go 程序来连接 MySQL 数据库,并进行基本的数据库操作(如创建表、插入数据、查询数据)。
main.go:
- package main
-
- import (
- "database/sql"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- )
-
- func main() {
- // 数据库连接字符串
- dataSourceName := "myuser:mypassword@tcp(127.0.0.1:3306)/mydb"
-
- // 打开数据库连接
- db, err := sql.Open("mysql", dataSourceName)
- if err != nil {
- fmt.Println("Error connecting to database:", err)
- return
- }
- defer db.Close()
-
- // 测试连接
- err = db.Ping()
- if err != nil {
- fmt.Println("Error pinging to database:", err)
- return
- }
- fmt.Println("Connected to MySQL database!")
-
- // 创建表
- createTable := `
- CREATE TABLE IF NOT EXISTS users (
- id INT AUTO_INCREMENT,
- name VARCHAR(50) NOT NULL,
- age INT NOT NULL,
- PRIMARY KEY (id)
- );`
- _, err = db.Exec(createTable)
- if err != nil {
- fmt.Println("Error creating table:", err)
- return
- }
- fmt.Println("Table created or already exists.")
-
- // 插入数据
- insertUser := "INSERT INTO users (name, age) VALUES (?, ?);"
- result, err := db.Exec(insertUser, "John Doe", 30)
- if err != nil {
- fmt.Println("Error inserting data:", err)
- return
- }
- userId, err := result.LastInsertId()
- if err != nil {
- fmt.Println("Error getting last insert ID:", err)
- return
- }
- fmt.Printf("User inserted with ID: %d\n", userId)
-
- // 查询数据
- query := "SELECT id, name, age FROM users;"
- rows, err := db.Query(query)
- if err != nil {
- fmt.Println("Error querying data:", err)
- return
- }
- defer rows.Close()
-
- fmt.Println("Users:")
- for rows.Next() {
- var id int
- var name string
- var age int
- err := rows.Scan(&id, &name, &age)
- if err != nil {
- fmt.Println("Error scanning row:", err)
- return
- }
- fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
- }
-
- if err = rows.Err(); err != nil {
- fmt.Println("Error in row iteration:", err)
- }
- }
保存文件并运行程序:
go run main.go
导入包:
"database/sql" 包用于数据库交互。_ "github.com/go-sql-driver/mysql" 实际包含了 MySQL 驱动,_ 表示只导入包但不直接使用其内容。数据库连接字符串:
myuser:mypassword@tcp(127.0.0.1:3306)/mydb 包含用户名、密码、主机地址、端口和数据库名称。打开数据库连接:
sql.Open 打开与数据库的连接,返回一个 *sql.DB 类型的数据库句柄。测试连接:
db.Ping 测试与数据库的连接。创建表:
db.Exec 执行 SQL 语句来创建表。插入数据:
db.Exec 执行插入数据的 SQL 语句,并获取插入数据的 ID。查询数据:
db.Query 查询数据,并使用 rows.Next 迭代查询结果,使用 rows.Scan 将结果扫描到变量中。db.Prepare 预处理 SQL 语句,提高效率。db.Begin 开始事务,提高数据一致性。*sql.DB 的连接池参数,例如 db.SetMaxOpenConns,db.SetMaxIdleConns,db.SetConnMaxLifetime。如果你有更多的需求或者遇到任何问题,请随时告诉我!