訪問關係資料庫

使用 Go,您可以將各種資料庫和資料訪問方法整合到您的應用程式中。本節的主題描述瞭如何使用標準庫的 database/sql 包來訪問關係型資料庫。

有關 Go 中資料訪問的入門教程,請參閱 教程:訪問關係型資料庫

Go 還支援其他資料訪問技術,包括用於更高層級關係型資料庫訪問的 ORM 庫,以及非關係型 NoSQL 資料儲存。

  • 物件關係對映 (ORM) 庫。 雖然 database/sql 包包含用於低層級資料訪問邏輯的函式,但您也可以使用 Go 在更高抽象級別訪問資料儲存。有關 Go 中兩個流行的物件關係對映 (ORM) 庫的更多資訊,請參閱 GORM包參考)和 ent包參考)。
  • NoSQL 資料儲存。 Go 社群已為大多數 NoSQL 資料儲存開發了驅動程式,包括 MongoDBCouchbase。您可以在 pkg.go.dev 上搜索更多資訊。

支援的資料庫管理系統

Go 支援所有最常見的關係型資料庫管理系統,包括 MySQL、Oracle、Postgres、SQL Server、SQLite 等。

您可以在 SQLDrivers 頁面找到驅動程式的完整列表。

用於執行查詢或進行資料庫更改的函式

database/sql 包包含專門為您要執行的資料庫操作型別設計的函式。例如,雖然您可以使用 QueryQueryRow 來執行查詢,但 QueryRow 是為期望只有一行結果的情況設計的,它省略了返回僅包含一行結果的 sql.Rows 的開銷。您可以使用 Exec 函式透過 SQL 語句(如 INSERTUPDATEDELETE)進行資料庫更改。

更多資訊,請參閱以下內容

事務

透過 sql.Tx,您可以編寫程式碼在事務中執行資料庫操作。在事務中,可以一起執行多個操作,最後進行一次提交以原子方式應用所有更改,或者進行一次回滾以撤銷它們。

有關事務的更多資訊,請參閱 執行事務

查詢取消

當您希望能夠取消資料庫操作時(例如,當客戶端連線關閉或操作執行時間過長時),可以使用 context.Context

對於任何資料庫操作,您都可以使用接受 Context 作為引數的 database/sql 包函式。使用 Context,您可以為操作指定超時或截止時間。您還可以使用 Context 將取消請求透過應用程式傳播到執行 SQL 語句的函式,從而確保在不再需要資源時釋放它們。

更多資訊,請參閱 取消進行中的操作

託管連線池

當您使用 sql.DB 資料庫控制代碼時,您將連線到一個內建的連線池,該連線池根據您的程式碼需求建立和銷燬連線。透過 sql.DB 的控制代碼是使用 Go 進行資料庫訪問的最常見方式。更多資訊,請參閱 開啟資料庫控制代碼

database/sql 包會為您管理連線池。但是,對於更高階的需求,您可以按照 設定連線池屬性 中所述設定連線池屬性。

對於需要單個預留連線的操作,database/sql 包提供了 sql.Conn。當使用 sql.Tx 進行事務處理不合適時,Conn 尤其有用。

例如,您的程式碼可能需要

  • 透過 DDL 進行模式更改,包括包含自身事務語義的邏輯。混合使用 sql 包的事務函式和 SQL 事務語句是一種不良做法,如 執行事務 中所述。
  • 執行建立臨時表的查詢鎖定操作。

更多資訊,請參閱 使用專用連線