存取關係資料庫
使用 Go,您可以將各種資料庫和資料存取方法納入應用程式中。本節中的主題說明如何使用標準函式庫的 database/sql
套件存取關係資料庫。
如需使用 Go 存取資料的入門教學,請參閱 教學:存取關係資料庫。
Go 也支援其他資料存取技術,包括用於關聯式資料庫較高層級存取的 ORM 函式庫,以及非關聯式 NoSQL 資料儲存。
- 物件關聯對應 (ORM) 函式庫。雖然
database/sql
套件包含用於較低層級資料存取邏輯的函式,但您也可以使用 Go 在較高的抽象層級存取資料儲存。如需瞭解 Go 的兩個熱門物件關聯對應 (ORM) 函式庫,請參閱 GORM (套件參考) 和 ent (套件參考)。 - NoSQL 資料儲存。Go 社群已為大部分 NoSQL 資料儲存開發驅動程式,包括 MongoDB 和 Couchbase。您可以在 pkg.go.dev 中搜尋更多內容。
支援的資料庫管理系統
Go 支援所有最常見的關聯式資料庫管理系統,包括 MySQL、Oracle、Postgres、SQL Server、SQLite 等。
您可以在 SQLDrivers 頁面中找到驅動程式的完整清單。
用於執行查詢或進行資料庫變更的函式
database/sql
套件包含專門設計給您要執行的資料庫操作類型之函式。例如,雖然您可以使用 Query
或 QueryRow
來執行查詢,但 QueryRow
專門設計給您預期只有一個列的情況,省略傳回只包含一個列的 sql.Rows
的開銷。您可以使用 Exec
函式來使用 SQL 陳述式(例如 INSERT
、UPDATE
或 DELETE
)進行資料庫變更。
如需更多資訊,請參閱下列內容
交易
透過 sql.Tx
,您可以撰寫程式碼來在交易中執行資料庫操作。在交易中,多個操作可以一起執行,並以最後的提交來結束,以套用所有變更為一個原子步驟,或以回滾來捨棄變更。
如需有關交易的更多資訊,請參閱 執行交易。
查詢取消
當您想要取消資料庫操作時,您可以使用 context.Context
,例如在客戶端連線關閉或操作執行時間比您想要的長時。
對於任何資料庫操作,您可以使用將 Context
作為引數的 database/sql
套件函式。使用 Context
,您可以指定操作的逾時或截止時間。您也可以使用 Context
來透過您的應用程式將取消要求傳播給執行 SQL 陳述式的函式,確保在不再需要時釋放資源。
如需更多資訊,請參閱 取消進行中的操作。
受管理的連線池
當您使用 sql.DB
資料庫處理時,您會連線到內建連線池,它會根據您的程式碼需求建立和捨棄連線。透過 sql.DB
處理是使用 Go 進行資料庫存取最常見的方式。如需詳細資訊,請參閱開啟資料庫處理。
database/sql
套件會為您管理連線池。但是,對於更進階的需求,您可以設定連線池屬性,如設定連線池屬性中所述。
對於您需要單一保留連線的作業,database/sql
套件提供sql.Conn
。Conn
特別適用於使用 sql.Tx
進行交易會是不佳選擇的情況。
例如,您的程式碼可能需要
- 透過 DDL 進行架構變更,包括包含其自身交易語意的邏輯。將
sql
套件交易函式與 SQL 交易陳述式混合是不良做法,如執行交易中所述。 - 執行建立暫時資料表的查詢鎖定作業。
如需詳細資訊,請參閱使用專用連線。