执行不返回数据的SQL语句
2 分钟阅读
Executing SQL statements that don’t return data - 执行不返回数据的SQL语句
当您执行不返回数据的数据库操作时,请使用database/sql
包的Exec
或ExecContext
方法。以这种方式执行的SQL语句包括INSERT
, DELETE
, 和UPDATE
。
当您的查询可能返回行时,请改为使用Query
或QueryContext
方法。更多信息请参见 Querying a database (查询数据库)。
ExecContext
方法的工作原理与Exec
方法相同,但有一个额外的context.Context
参数,如 Canceling in-progress operations (取消正在进行的操作) 中所述。
下面的例子中的代码使用DB.Exec来执行一条语句,将一个新的记录专辑添加到一个album
表中。
|
|
DB.Exec
返回值:一个sql.Result和一个错误。当错误为nil
时,您可以使用Result
来获得最后插入的项目的ID(如在例子中)或检索受操作影响的行数。
注意
预处理语句中的参数占位符根据您所使用的
DBMS
和驱动而不同。例如,Postgres
的pq driver需要一个类似于$1
的占位符,而不是?
.
如果您的代码将重复执行相同的SQL语句,考虑使用一个sql.Stmt
来从SQL语句中创建一个可重复使用的预处理语句。更多信息请参见 Using prepared statements(使用预处理语句)。
注意
不要使用字符串格式化函数,如
fmt.Sprintf
来组合一个SQL语句! 您可能会引入一个SQL注入的风险。更多信息,请参见Avoiding SQL injection risk(避免SQL注入风险)。
用于执行不返回行的SQL语句的函数
Function 函数 | Description 描述 |
---|---|
DB.Exec DB.ExecContext | 单独执行一条 SQL 语句。 |
Tx.Exec Tx.ExecContext | 在较大的事务中执行 SQL 语句。有关详细信息,请参阅请参阅Executing transactions (执行事务) 。 |
Stmt.Exec Stmt.ExecContext | 执行一个预处理SQL语句。更多信息,请参见 Using prepared statements(使用预处理语句)。 |
Conn.ExecContext | 用于保留连接。更多信息,请参见Managing connections( 管理连接)。 |
最后修改 June 4, 2023: 将标准库、第三方包、官方博客从docs中脱离出来成为一个单独的menu (1282bf6)