如何查看Psql是否成功更新了Go中的记录

How can I check whether Psql successfully updated the record in Go

我使用 this driver 与 Go 中的 psql 进行通信。现在,当我发出更新查询时,我无法知道它是否实际更新了任何内容(如果不存在此类 ID,它可以更新 0 行)。

_, err := Db.Query("UPDATE tags SET name= WHERE id=1", name)

我试图调查 err 变量(按照文档建议的 Insert 语句的方式):

if err == sql.ErrNoRows {
    ...
}

但即使 id 不存在,err 仍然为 null。

我还尝试使用带有返回子句的 QueryRow:

id := 0
err := Db.QueryRow("UPDATE tags SET name= WHERE id=1 RETURNING id", name).Scan(&id)

但是当数据库中不存在 id=1 时,这个无法扫描 &id。


那么检查我的更新是否更新任何内容的规范方法是什么?

对于没有 return 结果的查询,请尝试使用 db.Exec() 而不是 db.Query()。它不是 returning 一个 sql.Rows 对象(它没有办法检查有多少行受到影响),而是 return 一个 sql.Result 对象,它有一个方法RowsAffected() (int64, error)。这 returns 受提供给 Exec() 调用的查询中的任何写入操作影响(插入、删除、更新)的行数。

请注意,如果您的查询不直接影响任何行,而只是通过子查询影响行,则受子查询影响的行不会被计为受该方法调用影响的行。

此外,正如方法注释所指出的,这不适用于 所有 数据库类型,但我知道它适用于 pq,因为我们我们自己正在使用该驱动程序(并使用 RowsAffected() 方法)。

参考链接: