在go语言操作数据库
1 简介
go语言为sql提供了一个围绕SQL(或类似SQL)的通用数据库接口 。
sql 包必须与数据库驱动程序结合使用。
它不支持上下文取消的驱动程序将不会返回,直到 查询完成后。
2 SQL 相关库:
-
- 主要功能 database/sql
Go 标准库中的 SQL 抽象接口,不直接实现数据库驱动。
提供统一的 API 来访问各种关系型数据库(MySQL、PostgreSQL、SQLite 等)。
定义了如 sql.DB, sql.Tx, sql.Stmt, sql.Row, sql.Rows 等核心类型。
管理连接池、预处理语句、事务等。
设计特点
不和任何数据库绑定,依赖于第三方驱动实现。
是一个 Database Driver 的桥梁层。
设计上鼓励驱动注册机制(通过 sql.Register(driverName, driver) 来注册)。
🧩 使用方法
你必须引入第三方驱动并注册(通常通过 import _ “driver” 的方式触发 init() 注册)。
示例:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
-
- 主要功能 go-sql-driver/mysql
MySQL 的驱动实现,用于连接 MySQL 数据库。
实现了 database/sql/driver.Driver 接口,是标准库的驱动插件。
具备如下能力:
连接 MySQL(支持 TCP 和 Unix Socket)
处理 MySQL 的身份验证机制
事务、预处理、TLS、安全连接、连接参数设置等
设计特点
专注于 MySQL 协议的实现,不做抽象接口封装。
与 database/sql 完全配套使用,不提供额外 ORM 功能。
支持 MySQL 5.x 和大部分 MySQL 8.x 功能。
🧩** 如何配合使用**
主要通过
import _ "github.com/go-sql-driver/mysql" 注册到 database/sql。
然后用 sql.Open(“mysql”, dsn) 来实际连接。
3 示例实践
import (
"database/sql"
_ "github.com/go-sql-driver/mysql" // 注册 mysql 驱动
)
func main() {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/mydb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 使用 database/sql 提供的标准方法
var name string
err = db.QueryRow("SELECT name FROM users WHERE id = ?", 1).Scan(&name)
if err != nil {
log.Fatal(err)
}
fmt.Println("User name:", name)
}
4 小结和建议
对比区别
项目 类型 是否操作数据库 是否可独立使用 主要功能 使用方式
database/sql Go 标准库 否 是(需要注册驱动) 提供统一 SQL 接口,连接池、事务支持等 sql.Open(driverName, dsn)
go-sql-driver/mysql 第三方驱动库 是(实现连接) 否(必须配合 database/sql 使用) 实现 MySQL 协议,用于连接数据库 import _ 注册驱动
如果你需要更高级的功能如 ORM、模型映射等,可以考虑配合以下库:
gorm ORM 框架 封装了 database/sql,使用更高级抽象
sqlx 强化版 database/sql 支持 struct 映射、named queries 等
sqlc 静态 SQL 查询生成器 编译时生成类型安全的查询代码
- 点赞
- 收藏
- 关注作者
评论(0)