database/sql 包使用

1. 引入包与数据库驱动

使用 database/sql 需要配合具体数据库驱动,例如 MySQL 使用 github.com/go-sql-driver/mysql

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

注意驱动包需要匿名导入。

2. 打开数据库连接

db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
if err != nil {
    log.Fatal(err)
}
defer db.Close()

sql.Open 不会立即建立连接,第一次操作时会自动连接。

3. 执行查询

查询单行

var name string
err = db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name)

查询多行

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. 执行插入、更新、删除

result, err := db.Exec("UPDATE users SET name=? WHERE id=?", "Alice", 1)
affected, err := result.RowsAffected()

5. 事务管理

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. 连接池设置

db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(time.Hour)

database/sql 包提供统一的数据库访问接口,结合具体驱动即可操作多种关系型数据库,适用于各种应用场景。