在go语言操作数据库

举报
码乐 发表于 2025/07/24 06:58:15 2025/07/24
【摘要】 1 简介go语言为sql提供了一个围绕SQL(或类似SQL)的通用数据库接口 。sql 包必须与数据库驱动程序结合使用。 它不支持上下文取消的驱动程序将不会返回,直到 查询完成后。 2 SQL 相关库:主要功能 database/sqlGo 标准库中的 SQL 抽象接口,不直接实现数据库驱动。提供统一的 API 来访问各种关系型数据库(MySQL、PostgreSQL、SQLite 等)...

1 简介

go语言为sql提供了一个围绕SQL(或类似SQL)的通用数据库接口 。

sql 包必须与数据库驱动程序结合使用。 

它不支持上下文取消的驱动程序将不会返回,直到 查询完成后。

2 SQL 相关库:

    1. 主要功能 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")
    1. 主要功能 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 查询生成器 编译时生成类型安全的查询代码

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。