执行不返回数据的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( 管理连接)。 |