執行不傳回資料的 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 供保留的連線使用。如需更多資訊,請參閱管理連線