[SQLite] Command Line Shell For SQLite

SQLiteライブラリは、シンプルなコマンドラインユーティリティであるsqlite3を含んでいます。これにより、ユーザはSQLiteデータベースに対して、手動でSQLを入力、実行することができます。

ことはじめ

SQLiteデータベースを保持しているファイルの名前を引数にして、sqlite3プログラムを起動する。

プログラムを終了する際は、システムのEnd-Of-Fileキャラクタを入力する(通常はControl-D)か、割り込みキャラクタ(通常はControl-C)を入力して停止する。

セミコロンがSQLコマンドの終端となるので、これを入力するまでは複数行にわたって改行して入力することもできる。

補足: SQLite_MASTERテーブル

データベーススキーマは、SQLiteデータベースの中に”sqlite_master”とよばれる特別なテーブルとして保存されている。
この特別なテーブルに対してSELECTステートメントを実行することでスキーマの情報が得られる。

しかし、このsqlite_masterテーブルについては、DROP TABLE、UPDATE、INSERTやDELETEは使用できない。何かデータベースに変更があるときは、このテーブルは自動的に変更されるため、手動で値を変更することはできない。

sqlite3の特別なコマンド

入力の際に、ドット”.”つきのコマンドを入力すると、sqlite3プログラム自身へのコマンドとして解釈される。これら”ドット・コマンド”は、典型的にはクエリに対する出力フォーマットの形式を変更する際やクエリ文に対してあるプレパッケージを実行する際に使用される。

使用可能なドット・コマンドを確認するには、”.help”コマンドを入力する。

出力フォーマットを変更する

sqlite3プログラムは、8つの異なるフォーマットに対応している。
“csv”、”column”、”html”、”insert”、”line”、”list”、”tabs”、”tcl”
“.mode”コマンドを使うことで、これら出力フォーマットを切り替えることができる。

“list”モード

“.separator”コマンドを使用すると、リストモードのセパレータを変更することができる。
例えば、カンマとスペースをセパレータにすると、

“line”モード
各列はデータベースの行を表しており、それぞれの行は”属性名 = データ”で表される。
連続したレコードは空行で区切られる。

“column”モード
各レコードは対応する属性ごとに列で分けられ、各行で表示される。

デフォルトでは、各列は少なくとも10文字”———-”分の幅で表示される。
列の幅が広すぎる場合、”.width”コマンドで列の幅を変更できる。

最初の2行は列の属性が出力されていた。この表示は”.header”コマンドで設定することができる。

“insert”モードは、得られた出力を他のデータベースへの入力として使用できる。

“html”モードは、XHTMLテーブルとして結果を表示する。ただし、開始タグ

と終了タグ
は出力されない。要素ととのみ。CGI作成時に便利?

結果をファイルへ出力する

デフォルトでは、sqlite3のクエリの結果は標準出力へ送られる。”.output”コマンドを使用すると、これを変更できる。引数にファイル名を与えればよい。再び標準出力に戻すには、”.output stdout”とすればよい。