1. ホーム
  2. データベース
  3. エスキューエルライト

SQLiteチュートリアル(X)。インメモリデータベースとテンポラリデータベース

2022-01-21 12:19:52

I. インメモリデータベース

    SQLiteでは、データベースは通常ディスクファイルに保存されます。しかし、場合によっては、データベースを常にメモリ上に存在させることができます。これを行う最も一般的な方法の一つは、sqlite3_open()を呼び出す際に、データベースのファイル名パラメータに ":memory:"を渡す方法です。

コピーコード コードは以下の通りです。

    rc = sqlite3_open(":memory:", &db);

    上記の関数が呼ばれた後、ディスクファイルは生成されず、その代わりに純粋なメモリ内に新しいデータベースが正常に作成されます。永続性はないので、このデータベースは現在のデータベース接続が閉じられるとすぐに消えてしまいます。ここで重要なのは、上記の方法で複数のデータベース接続をインメモリに作成することはできますが、それらは異なるデータベースであり、互いに何の関係もないということです。実際には、インメモリデータベースを、他の通常のデータベースと同様に、Attachコマンドで現在の接続にアタッチすることもできます、例えば、以下のようになります。
コピーコード コードは以下の通りです。

    ATTACH DATABASE ':memory:' AS aux1;

II. 一時的なデータベース

    sqlite3_open() 関数の呼び出しやATTACHコマンドの実行時に、 database file パラメータに空文字列を渡すと、一時データベースの基礎ファイルとして新しい一時ファイルが作成されます。

コピーコード コードは以下の通りです。

    rc = sqlite3_open("", &db);

    または
コピーコード コードは以下の通りです。

    ATTACH DATABASE '' AS aux2;

    インメモリデータベースと同様に、2つのデータベース接続によって作成される一時的なデータベースは互いに独立しており、接続が閉じられ、その基礎となるファイルが自動的に削除されると、自動的に消滅します。
    ディスクファイルは一時データベースのデータ情報を保存するために作成されますが、一時データベースは実際には通常インメモリデータベースと同様にメモリ上に存在します。唯一の違いは、一時データベースが大きすぎる場合、インメモリデータベースが常にメモリ上にデータを保存するのに対し、SQLiteは他の処理に使用できるメモリをより多く確保するために一時データベースのデータの一部をディスクファイルに書き込むことです。