While對於相同的 SQL 語句,您可以互換使用 db.Exec 和 db.Query,它們會產生不同的結果。 db.Exec 傳回受影響的行數(如果驅動程式支援),而 db.Query 傳回 rows 物件。
例如,要計算DELETE 語句中刪除的行數:
res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now()) numDeleted, err := res.RowsAffected() // Returns the number of deleted rows
替代方案(但效率較低):
rows, err := db.Query(`DELETE FROM my_table WHERE expires_at = RETURNING *`, time.Now()) numDeleted := 0 for rows.Next() { numDeleted++ } // Iterate over deleted rows
當您不這樣做時也應該使用db.Exec需要查詢結果,只需進行錯誤檢查:
if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }
但是,手動呼叫 db.Prepare 並且快取產生的 db.Stmt 可以增強頻繁執行的查詢的效能。有關更多詳細信息,請參閱 PostgreSQL 文件:https://www.postgresql.org/docs/current/static/sql-prepare.html
以上是我何時以及為什麼應該在 Go 中使用 `db.Exec()` 和準備好的語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!