執行不返回資料的 SQL 語句
當您執行不返回資料的資料庫操作時,請使用 database/sql
包中的 Exec
或 ExecContext
方法。您透過這種方式執行的 SQL 語句包括 INSERT
、DELETE
和 UPDATE
。
當您的查詢可能返回行時,請改用 Query
或 QueryContext
方法。欲瞭解更多資訊,請參閱查詢資料庫。
ExecContext
方法與 Exec
方法的作用相同,但額外包含一個 context.Context
引數,如取消進行中的操作中所述。
以下示例中的程式碼使用 DB.Exec
執行語句,將新的唱片專輯新增到 album
表中。
func AddAlbum(alb Album) (int64, error) {
result, err := db.Exec("INSERT INTO album (title, artist) VALUES (?, ?)", alb.Title, alb.Artist)
if err != nil {
return 0, fmt.Errorf("AddAlbum: %v", err)
}
// Get the new album's generated ID for the client.
id, err := result.LastInsertId()
if err != nil {
return 0, fmt.Errorf("AddAlbum: %v", err)
}
// Return the new album's ID.
return id, nil
}
DB.Exec
返回值:一個 sql.Result
和一個錯誤。當錯誤為 nil
時,您可以使用 Result
獲取最後插入項的 ID(如示例所示)或檢索受操作影響的行數。
注意: 預處理語句中的引數佔位符因您使用的 DBMS 和驅動程式而異。例如,Postgres 的 pq 驅動程式需要像 $1
這樣的佔位符,而不是 ?
。
如果您的程式碼將重複執行相同的 SQL 語句,請考慮使用 sql.Stmt
從 SQL 語句建立可重用的預處理語句。欲瞭解更多資訊,請參閱使用預處理語句。
注意: 不要使用字串格式化函式(如 fmt.Sprintf
)來組裝 SQL 語句!您可能會引入 SQL 注入風險。欲瞭解更多資訊,請參閱避免 SQL 注入風險。
用於執行不返回行的 SQL 語句的函式
函式 | 描述 |
---|---|
DB.Exec DB.ExecContext
|
單獨執行單個 SQL 語句。 |
Tx.Exec Tx.ExecContext
|
在更大的事務中執行 SQL 語句。欲瞭解更多資訊,請參閱執行事務。 |
Stmt.Exec Stmt.ExecContext
|
執行已預處理的 SQL 語句。欲瞭解更多資訊,請參閱使用預處理語句。 |
Conn.ExecContext
|
用於保留連線。有關更多資訊,請參閱管理連線。 |