プログラミングに移るまえにちょっとマニアックな使い方もおさえておこう。SQLiteは、ファイルベースデータベースという話をしたが、ファイルベースは手軽に保管、読み込みができて、使い勝手がいいようにも思えるが、やっぱりそこはファイルベース。遅いです。最近は、SSDが当たり前になってきて、やや気にならなくなってきたところもありますが。やっぱり、それこそ昨今潤沢になってきた物理メモリ上で、すべての処理をロードして高速に片づけてしまいたいこともあります。
そんなときは、ファイル名を特殊な ":memory:"というキーワードに入れ替えることにより、インメモリ上でSQLiteデータベースを扱うことが可能になります。
sqlite3 :memory:
前回と同じように、テーブルを作成してみましょう。
普通にテーブルが作成できましたね。
ファイルを確認しても、データベースファイルが作られていないことも確認しておきましょう。そのままデータを追加してあげます。
ちゃんとデータができているのが確認できます。これが全てメモリ上で実行されているわけですん。
メモリ上で実行されているということは、アプリケーションを終了してしまうと、この情報がなくなってしまうわけですね。さすがに、最終的なデータは保存しておきたい。そして、そのあと保存したデータを読み込んで再開したい。そんなときに使用するのが、.backupと.restoreです。
sqlite> .backup [バックアップデータベースファイル名]
以下のように実行します。
ファイルができたことを確認しておきましょう。
では、一度、.exitしてsqliteを抜けてから、再度、インメモリ指定でSQLiteを起動して、これをリストアしてみましょう。
sqlite> .restore [バックアップデータベースファイル名]
以下のようになります。しっかりとデータが復元できていますね!
ちなみに、インメモリではなく、普通にファイルベースのデータベースとしてこれを扱うことも可能です。とても便利ですね。
また、バイナリ形式ではなく、このテーブルを構成するためのSQL文として保管しておきたい場合もあるでしょう。その場合は、.dumpコマンドを使います。
いや、たしかに出たけど、標準出力されてしまいました。これを出力先を、ファイルに指定します。
sqlite> .output [出力先(ファイル名など)]
これを使って、dumpし直します。
ちゃんと、SQL.txtに出るようになりました。しかし、このままだとすべての出力が、SQL.txtに出てしまいますので、標準出力に戻しておきましょう。
さて、SQL文を吐き出せたのはいいとして、これを読み込めないと意味がないですね。SQL文を読み込むときは、.readを使用します。
以下のように、SQLが正しく実行されて、反映されたのが分かります。
さて、だいたい使いたい基本的技術は、出そろいました。今度こそ、次回からプログラムによるこれらの制御をやっていきましょう。