执行不返回数据的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)