Go database/sql 数据库访问入门
wxk1991 Lv5

Go database/sql 数据库访问入门

Go 标准库的 database/sql 提供了统一的数据库访问接口。它不绑定具体数据库,需要配合 MySQL、PostgreSQL、SQLite 等驱动使用。


一、打开连接池

1
2
3
4
5
db, err := sql.Open("mysql", dsn)
if err != nil {
return err
}
defer db.Close()

sql.Open 创建的是连接池对象,不一定立即连接数据库。可以用 PingContext 检查连接。


二、查询单行

1
2
3
4
5
var name string
err := db.QueryRowContext(ctx, "select name from users where id = ?", id).Scan(&name)
if err != nil {
return err
}

如果没有数据,通常会返回 sql.ErrNoRows


三、查询多行

1
2
3
4
5
rows, err := db.QueryContext(ctx, "select id, name from users")
if err != nil {
return err
}
defer rows.Close()

遍历后还要检查 rows.Err(),避免漏掉迭代过程中的错误。


四、执行写操作

1
2
3
4
5
result, err := db.ExecContext(ctx, "delete from users where id = ?", id)
if err != nil {
return err
}
affected, _ := result.RowsAffected()

写操作要关注影响行数,尤其是更新和删除。


五、实践建议

数据库访问函数建议都接收 context.Context,这样请求取消或超时时,数据库操作也能及时结束。

另外,不要手动拼接 SQL 参数,优先使用占位符,降低 SQL 注入风险。