跳至主要内容

Go 專案資料庫交易相關型別與函式

· 閱讀時間約 4 分鐘
Ckai

type DB

DB代表零或多個底層連接池的資料庫控制代碼,可安全的被多個 goroutine 同時使用。

sql套件會自動建立及釋放連接,也會維護閒置連接的自由連接池。如果資料庫有連接狀態的概念,即可穩定觀察交易(Tx)或連接(Conn)的狀態。一旦調用 DB.Begin,回傳的 Tx 將綁定到一個單獨的連接。一旦在交易中調用Commit 或 Rollback,該交易的連接將回傳到 DB 的閒置連接池中。可以使用 SetMaxIdleConns 控制池的規模。

func (*DB) ExecContext

func (db *DB) ExecContext(ctx context.Context, query string, args ...any) (Result, error)

ExecContext 執行一個查詢,但不回傳任何 row。引數 args 參數是查詢當中的占位符參數的值。

func (*DB) PrepareContext

func (db *DB) PrepareContext(ctx context.Context, query string) (*Stmt, error)

PrepareContext 建立預編譯語句,以供後續查詢或執行。從回傳的語句中可同時運行多個查詢或執行。當不再需要該語句時,調用者必須調用該語句的 Close 方法。上下文用於語句的準備,而非語句的執行。

func (*DB) QueryContext

func (db *DB) QueryContext(ctx context.Context, query string, args ...any) (*Rows, error)

QueryContext 執行會回傳資料的查詢,通常是 SELECT。args 用於填充查詢中的佔位符參數。

func (*DB) QueryRowContext

func (db *DB) QueryRowContext(ctx context.Context, query string, args ...any) *Row

QueryRowContext 用以執行預期最多只會回傳一行的查詢,例如 SELECT。QueryRowContext 一定會回傳一個非 nil 的值。錯誤會被延後到呼叫 Row 的 Scan 方法時才回傳。如果查詢沒有選擇到任何行,Row 的 Scan 方法將回傳 ErrNoRows。否則,Row 的 Scan 方法會掃描第一行選擇的行並捨棄其餘的行。

func (*DB) BeginTx

func (db *DB) BeginTx(ctx context.Context, opts *TxOptions) (*Tx, error)

BeginTx 會開啟一段交易。

傳入函式的 context 會在交易 Commit 或 Rollback 之前持續使用。如果 context 被取消,sql package 會 Rollback 交易。如果傳入 BeginTx 的 context 被取消,Tx.Commit 將回傳錯誤。

TxOptions 非必要,若欲使用預設值,則可以傳入 nil。如果使用驅動程式不支援的非默認隔離級別,函式將回傳錯誤。

type Tx

Tx 是一個進行中的資料庫交易。交易於結束前必須呼叫 Commit 或 Rollback。呼叫 Commit 或 Rollback 後,所有對於此交易的操作都會失敗並回傳 ErrTxDone。透過交易的 Prepare 或 Stmt 方法所準備的敘述會在呼叫 Commit 或 Rollback 後關閉。