執行不返回資料的 SQL 語句

當您執行不返回資料的資料庫操作時,請使用 database/sql 包中的 ExecExecContext 方法。您透過這種方式執行的 SQL 語句包括 INSERTDELETEUPDATE

當您的查詢可能返回行時,請改用 QueryQueryContext 方法。欲瞭解更多資訊,請參閱查詢資料庫

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 用於保留連線。有關更多資訊,請參閱管理連線