更新时间:2026-07-28 GMT+08:00
分享

type Tx

type Tx接口定义了一系列方法,用于管理数据库事务,常用方法如表1所示。

表1 type Tx接口的常用方法

方法

描述

返回值类型

(tx *Tx)Commit()

提交事务。

error

(tx *Tx)Exec(query string, args ...interface{})

执行一个不返回数据行的操作。

Result, error

(tx *Tx)ExecContext(ctx context.Context, query string, args ...interface{})

在给定上下文中,执行一个不返回数据行的操作。

Result, error

(tx *Tx)Prepare(query string)

为以后的查询或执行创建一个预处理语句。返回的语句将在事务中执行,并且一旦事务被提交或回滚就不能再使用。

*Stmt, error

(tx *Tx)PrepareContext(ctx context.Context, query string)

为以后的查询或执行创建一个预处理语句。返回的语句将在事务中执行,并且一旦事务被提交或回滚就不能再使用。

给定的上下文将用于预备阶段,而不是事务执行阶段。该方法返回的语句将在事务上下文中执行。

*Stmt, error

(tx *Tx)Query(query string, args ...interface{})

执行一个返回数据行的查询。

*Rows, error

(tx *Tx)QueryContext(ctx context.Context, query string, args ...interface{})

在给定上下文中,执行一个返回数据行的查询。

*Rows, error

(tx *Tx)QueryRow(query string, args ...interface{})

执行一个只返回一个数据行的查询。

*Row

(tx *Tx)QueryRowContext(ctx context.Context, query string, args ...interface{})

在给定上下文中,执行一个只返回一个数据行的查询。

*Row

(tx *Tx)Rollback()

事务回滚。

error

(tx *Tx)Stmt(stmt *Stmt)

为已有的语句返回一个事务专用的预处理语句。

示例:

str, err := db.Prepare("INSERT INTO t1 VALUES(:1, :2)")
tx, err := db.Begin()
res, err := tx.Stmt(str).Exec(1, "aaa")

*Stmt

(tx *Tx)StmtContext(ctx context.Context, stmt *Stmt)

在给定上下文中,为已有的语句返回一个事务专用的预处理语句。

*Stmt

参数说明

表2 常用方法的参数说明

参数

参数说明

ctx

表示给定的上下文。

query

被执行的SQL语句。

args

被执行SQL语句需要绑定的参数。支持按位置绑定和按名称绑定,参见示例

stmt

已有的预处理语句,一般指prepared语句返回的预处理语句。

  • Query类方法Query()、QueryContext()、QueryRow()、QueryRowContext()通常用于查询语句,如SELECT语句。操作语句使用Exec()类方法执行,若非查询语句通过Query类方法执行,则执行结果可能与预期不符,因此不建议使用Query类方法执行非查询语句,例如UPDATE、INSERT等。
  • 使用Query类方法执行查询语句的结果需要通过type Rows中Next()方法获取,若不通过Next()方法获取,可能会产生不可预期的错误。

相关文档