访问关系数据库

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

有关使用 Go 进行数据访问的介绍性教程,请参阅 教程:访问关系数据库

Go 还支持其他数据访问技术,包括用于对关系数据库进行更高级别访问的 ORM 库,以及非关系 NoSQL 数据存储。

支持的数据库管理系统

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

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

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

database/sql 包包括专为您正在执行的数据库操作类型设计的函数。例如,虽然您可以使用 QueryQueryRow 来执行查询,但 QueryRow 是为仅期望一行的情况而设计的,省略了返回sql.Rows 的开销仅包含一行。可以使用 Exec 函数用 SQL 语句如INSERT, UPDATE, 或 DELETE进行数据库更改。

有关更多信息,请参阅以下内容:

事务

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

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

查询取消

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

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

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

托管连接池

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

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

对于那些需要单个保留连接的操作,database/sql 包提供了sql.Conn.Conn 当事务用sql.Tx是一个糟糕的选择时特别有用(Conn is especially useful when a transaction with sql.Tx would be a poor choice.)。

例如,您的代码可能需要:

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