访问关系型数据库

使用 Go,您可以将各种数据库和数据访问方法整合到应用程序中。本部分中的主题描述如何使用标准库的 database/sql 软件包访问关系型数据库。

有关使用 Go 进行数据访问的入门教程,请参阅 教程:访问关系型数据库

Go 也支持其他数据访问技术,包括用于高级访问关系型数据库的 ORM 库,以及非关系型 NoSQL 数据存储。

支持的数据库管理系统

Go 支持所有最常见的关联数据库管理系统,包括 MySQL、Oracle、Postgres、SQL Server、SQLite 等。

您可以在 SQLDrivers 页面找到驱动程序的完整列表。

执行查询或进行数据库更改的函数

database/sql 包含专门针对您要执行的数据库操作类型而设计的函数。例如,虽然您可以使用 QueryQueryRow 来执行查询,但 QueryRow 适用于您只期望单行的情况,省去了返回仅包含一行的 sql.Rows 的开销。您可以使用 Exec 函数通过 SQL 语句(如 INSERTUPDATEDELETE)进行数据库更改。

更多信息,请参见以下内容

事务

通过 sql.Tx,您可以编写代码在事务中执行数据库操作。在事务中,可以一起执行多个操作,并以最终提交来结束,以在一个原子步骤中应用所有更改,或以回滚来丢弃它们。

有关事务的更多信息,请参见 执行事务

查询取消

当您希望取消数据库操作时,可以使用 context.Context,例如当客户端连接关闭或操作运行时间超过您想要的时间时。

对于任何数据库操作,您都可以使用将 Context 作为参数的 database/sql 包函数。使用 Context,您可以为操作指定超时或截止时间。您还可以使用 Context 通过您的应用程序将取消请求传播到执行 SQL 语句的函数,确保在不再需要时释放资源。

更多信息,请参见 取消正在进行的操作

托管连接池

当您使用 sql.DB 数据库句柄时,您正在使用内置连接池进行连接,该连接池会根据您代码的需要创建和释放连接。通过 sql.DB 进行句柄操作是使用 Go 进行数据库访问的最常见方式。更多信息,请参见 打开数据库句柄

database/sql 包为您管理连接池。但是,对于更高级的需求,您可以按照 设置连接池属性 中的说明设置连接池属性。

对于需要单个保留连接的操作,database/sql 包提供了 sql.ConnConn 在使用 sql.Tx 进行事务处理不合适时特别有用。

例如,你的代码可能需要

更多信息,请参阅 使用专用连接