mysql
在 Go 中连接 MySQL 数据库,通常使用 github.com/go-sql-driver/mysql 驱动。以下是一个简单的示例,演示如何在 Go 中使用 MySQL。
1. 安装 MySQL 驱动
首先,确保安装了 go-sql-driver/mysql 库:
bash
go get github.com/go-sql-driver/mysql2. 示例代码:连接 MySQL 数据库
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 配置连接字符串
connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
// 打开数据库连接
db, err := sql.Open("mysql", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试数据库连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected to the MySQL database!")
// 执行一个简单的查询
var result string
err = db.QueryRow("SELECT 'Hello, MySQL!'").Scan(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
}解释:
sql.Open("mysql", connStr)连接到 MySQL 数据库。connStr是 MySQL 的连接字符串,格式为:username:password@tcp(127.0.0.1:3306)/dbname,其中:username是你的 MySQL 用户名。password是你的 MySQL 密码。127.0.0.1:3306是 MySQL 的主机和端口。dbname是你要连接的数据库名。
db.Ping()用于测试与数据库的连接是否成功。db.QueryRow("SELECT 'Hello, MySQL!'").Scan(&result)执行一个简单的查询,并将结果扫描到result变量中。
3. 插入数据示例:
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 配置连接字符串
connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
// 打开数据库连接
db, err := sql.Open("mysql", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试数据库连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected to the MySQL database!")
// 插入数据
result, err := db.Exec("INSERT INTO your_table (column1, column2) VALUES (?, ?)", "value1", "value2")
if err != nil {
log.Fatal(err)
}
// 获取插入的行ID
lastInsertID, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted row with ID: %d\n", lastInsertID)
}4. 查询多条记录示例:
go
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 配置连接字符串
connStr := "username:password@tcp(127.0.0.1:3306)/dbname"
// 打开数据库连接
db, err := sql.Open("mysql", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试数据库连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected to the MySQL database!")
// 查询多条数据
rows, err := db.Query("SELECT column1, column2 FROM your_table")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// 遍历结果集
for rows.Next() {
var column1 string
var column2 string
if err := rows.Scan(&column1, &column2); err != nil {
log.Fatal(err)
}
fmt.Printf("column1: %s, column2: %s\n", column1, column2)
}
// 检查遍历是否发生错误
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}解释:
db.Exec()用于执行插入、更新或删除语句。通过?占位符传递参数,防止 SQL 注入。result.LastInsertId()返回插入的最后一条记录的 ID。db.Query()用于查询多条记录。rows.Next()用于遍历每一行,并将字段值通过rows.Scan()填充到变量中。
这样你就可以使用 Go 连接并操作 MySQL 数据库了。如果需要更高级的功能,可以参考 go-sql-driver/mysql 的文档。