リレーショナルデータベースへのアクセス

Goを使用すると、アプリケーションにさまざまなデータベースとデータアクセスアプローチを組み込むことができます。このセクションのトピックでは、標準ライブラリのdatabase/sqlパッケージを使用してリレーショナルデータベースにアクセスする方法について説明します。

Goを使用したデータアクセスの入門チュートリアルについては、チュートリアル:リレーショナルデータベースへのアクセスを参照してください。

Goは、リレーショナルデータベースへのより高度なアクセスのためのORMライブラリ、および非リレーショナルNoSQLデータストアを含む、他のデータアクセステクノロジーもサポートしています。

サポートされているデータベース管理システム

Goは、MySQL、Oracle、Postgres、SQL Server、SQLiteなど、最も一般的なリレーショナルデータベース管理システムをすべてサポートしています。

SQLDriversページで、ドライバーの完全なリストを確認できます。

クエリを実行したり、データベースに変更を加える関数

database/sqlパッケージには、実行しているデータベース操作の種類に特化した関数が含まれています。たとえば、クエリを実行するにはQueryまたはQueryRowを使用できますが、QueryRowは1行だけを期待する場合に設計されており、1行のみを含むsql.Rowsを返すオーバーヘッドを省略します。INSERTUPDATEDELETEなどのSQLステートメントでデータベースに変更を加えるには、Exec関数を使用できます。

詳細については、以下を参照してください。

トランザクション

sql.Txを使用して、トランザクションでデータベース操作を実行するコードを作成できます。トランザクションでは、複数の操作をまとめて実行し、最終的なコミット(すべての変更を1つのアトミックステップで適用する)またはロールバック(変更を破棄する)で終了できます。

トランザクションの詳細については、トランザクションの実行を参照してください。

クエリのキャンセル

クライアントの接続が閉じられた場合や、操作が想定時間より長く実行された場合など、データベース操作をキャンセルする機能が必要な場合は、context.Contextを使用できます。

データベース操作には、Contextを引数として取るdatabase/sqlパッケージ関数を使用できます。Contextを使用して、操作のタイムアウトまたは期限を指定できます。また、Contextを使用して、アプリケーションからSQLステートメントを実行する関数までキャンセル要求を伝達し、必要なくなった場合はリソースを解放できます。

詳細については、進行中の操作のキャンセルを参照してください。

管理された接続プール

sql.DBデータベースハンドルを使用すると、コードのニーズに応じて接続を作成および破棄する組み込み接続プールを使用して接続します。sql.DBを使用したハンドルは、Goでデータベースアクセスを行う最も一般的な方法です。詳細については、データベースハンドルのオープンを参照してください。

database/sqlパッケージは接続プールを自動的に管理します。ただし、高度なニーズについては、接続プールプロパティの設定で説明されているように、接続プールプロパティを設定できます。

単一の予約済み接続が必要な操作の場合、database/sqlパッケージはsql.Connを提供します。sql.Txを使用したトランザクションが適切でない場合に、Connは特に便利です。

たとえば、コードでは次のことが必要になる場合があります。

詳細については、専用接続の使用を参照してください。