訪問關係資料庫
使用 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
。當使用 sql.Tx
進行事務處理不合適時,Conn
尤其有用。
例如,您的程式碼可能需要
- 透過 DDL 進行模式更改,包括包含自身事務語義的邏輯。混合使用
sql
包的事務函式和 SQL 事務語句是一種不良做法,如 執行事務 中所述。 - 執行建立臨時表的查詢鎖定操作。
更多資訊,請參閱 使用專用連線。