サポートされているデータベース管理システム
Goは、MySQL、Oracle、Postgres、SQL Server、SQLiteなど、最も一般的なリレーショナルデータベース管理システムをすべてサポートしています。
ドライバーの完全なリストは、SQLDriversページで確認できます。
クエリを実行したりデータベースを変更するための関数
database/sql
パッケージには、実行しているデータベース操作の種類に特化した関数が含まれています。たとえば、Query
やQueryRow
を使用してクエリを実行できますが、QueryRow
は単一の行のみを期待する場合に設計されており、1行のみを含むsql.Rows
を返すオーバーヘッドを省略します。Exec
関数を使用して、INSERT
、UPDATE
、またはDELETE
のようなSQL文でデータベースを変更できます。
詳細については、以下を参照してください:
トランザクション
sql.Tx
を通じて、トランザクション内でデータベース操作を実行するコードを書くことができます。トランザクションでは、複数の操作を一緒に実行し、最終的なコミットですべての変更を1つの原子的なステップで適用するか、ロールバックしてそれらを破棄することができます。
トランザクションの詳細については、トランザクションの実行を参照してください。
クエリのキャンセル
context.Context
を使用すると、クライアントの接続が閉じるときや、操作が希望するよりも長く実行されるときなど、データベース操作をキャンセルする機能を持つことができます。
任意のデータベース操作に対して、database/sql
パッケージ関数を使用してContext
を引数として渡すことができます。Context
を使用すると、操作のタイムアウトまたは期限を指定できます。また、Context
を使用して、アプリケーション全体でキャンセル要求を伝播し、SQL文を実行する関数に対してリソースが不要になった場合に解放されることを保証できます。
詳細については、進行中の操作のキャンセルを参照してください。
管理された接続プール
sql.DB
データベースハンドルを使用すると、コードのニーズに応じて接続を作成および破棄する組み込みの接続プールに接続します。sql.DB
を通じてのハンドルは、Goでデータベースアクセスを行う最も一般的な方法です。詳細については、データベースハンドルのオープンを参照してください。
database/sql
パッケージは、接続プールを管理します。ただし、より高度なニーズに対しては、接続プールプロパティの設定に記載されているように、接続プールのプロパティを設定できます。
単一の予約接続が必要な操作については、database/sql
パッケージがsql.Conn
を提供します。Conn
は、sql.Tx
を使用したトランザクションが不適切な選択である場合に特に便利です。
たとえば、コードは次のことを行う必要があるかもしれません:
- 自身のトランザクションセマンティクスを含むロジックを含むDDLを通じてスキーマ変更を行う。
sql
パッケージのトランザクション関数とSQLトランザクション文を混在させることは、トランザクションの実行に記載されているように、悪い慣行です。 - 一時テーブルを作成するクエリロック操作を実行します。
詳細については、専用接続の使用を参照してください。