主题
database/sql 包使用
1. 引入包与数据库驱动
使用 database/sql 需要配合具体数据库驱动,例如 MySQL 使用 github.com/go-sql-driver/mysql
:
go
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
注意驱动包需要匿名导入。
2. 打开数据库连接
go
db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
if err != nil {
log.Fatal(err)
}
defer db.Close()
sql.Open
不会立即建立连接,第一次操作时会自动连接。
3. 执行查询
查询单行
go
var name string
err = db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name)
查询多行
go
rows, err := db.Query("SELECT id, name FROM users")
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
}
4. 执行插入、更新、删除
go
result, err := db.Exec("UPDATE users SET name=? WHERE id=?", "Alice", 1)
affected, err := result.RowsAffected()
5. 事务管理
go
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
_, err = tx.Exec("INSERT INTO users(name) VALUES(?)", "Bob")
if err != nil {
tx.Rollback()
return
}
tx.Commit()
6. 连接池设置
go
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(time.Hour)
database/sql 包提供统一的数据库访问接口,结合具体驱动即可操作多种关系型数据库,适用于各种应用场景。