SQLiteライブラリは、シンプルなコマンドラインユーティリティであるsqlite3を含んでいます。これにより、ユーザはSQLiteデータベースに対して、手動でSQLを入力、実行することができます。
ことはじめ
SQLiteデータベースを保持しているファイルの名前を引数にして、sqlite3プログラムを起動する。
1 2 3 4 5 6 7 8 9 10 11 |
$ sqlite3 ex1 // SQLiteデータベース ex1 を作成し、ユーティリティ起動 SQLite version 3.6.11 // バージョン情報 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table tbl1(one varchar(10), two smallint); // テーブルtbl1作成 sqlite> insert into tbl1 values('hello!',10); sqlite> insert into tbl1 values('goodbye', 20); sqlite> select * from tbl1; // tbl1から全タプル表示 hello!|10 goodbye|20 sqlite> |
プログラムを終了する際は、システムのEnd-Of-Fileキャラクタを入力する(通常はControl-D)か、割り込みキャラクタ(通常はControl-C)を入力して停止する。
セミコロンがSQLコマンドの終端となるので、これを入力するまでは複数行にわたって改行して入力することもできる。
1 2 3 4 5 6 |
sqlite> CREATE TABLE tbl2 ( ...> f1 varchar(30) primary key, ...> f2 text, ...> f3 real ...> ); sqlite> |
補足: SQLite_MASTERテーブル
データベーススキーマは、SQLiteデータベースの中に”sqlite_master”とよばれる特別なテーブルとして保存されている。
この特別なテーブルに対してSELECTステートメントを実行することでスキーマの情報が得られる。
1 2 3 4 5 6 7 |
sqlite> select * from sqlite_master; type = table name = tbl1 tbl_name = tbl1 rootpage = 3 sql = create table tbl1(one varchar(10), two smallint) sqlite> |
しかし、このsqlite_masterテーブルについては、DROP TABLE、UPDATE、INSERTやDELETEは使用できない。何かデータベースに変更があるときは、このテーブルは自動的に変更されるため、手動で値を変更することはできない。
sqlite3の特別なコマンド
入力の際に、ドット”.”つきのコマンドを入力すると、sqlite3プログラム自身へのコマンドとして解釈される。これら”ドット・コマンド”は、典型的にはクエリに対する出力フォーマットの形式を変更する際やクエリ文に対してあるプレパッケージを実行する際に使用される。
使用可能なドット・コマンドを確認するには、”.help”コマンドを入力する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
sqlite> .help // ドット・コマンド .helpを入力 .backup ?DB? FILE Backup DB (default "main") to FILE // データベースをファイルにバックアップする .bail ON|OFF Stop after hitting an error. Default OFF // エラーが起きた際に停止するかどうか .databases List names and files of attached databases // 展開中のデータベースの名前とファイルパスをリスト表示 .dump ?TABLE? ... Dump the database in an SQL text format SQL形式でデータベースをダンプ .echo ON|OFF Turn command echo on or off // echoのオンオフ .exit Exit this program // sqlite3の終了 .explain ON|OFF Turn output mode suitable for EXPLAIN on or off. .genfkey ?OPTIONS? Options are: --no-drop: Do not drop old fkey triggers. --ignore-errors: Ignore tables with fkey errors --exec: Execute generated SQL immediately See file tool/genfkey.README in the source distribution for further information. .header(s) ON|OFF Turn display of headers on or off // ヘッダを表示するかどうか .help Show this message // このメッセージ .import FILE TABLE Import data from FILE into TABLE // FILEからTABLEへデータをインポート .indices TABLE Show names of all indices on TABLE .iotrace FILE Enable I/O diagnostic logging to FILE .load FILE ?ENTRY? Load an extension library .mode MODE ?TABLE? Set output mode where MODE is one of: // 出力形式の変更 csv Comma-separated values column Left-aligned columns. (See .width) html HTML <table> code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements .nullvalue STRING Print STRING in place of NULL values .output FILENAME Send output to FILENAME .output stdout Send output to the screen .prompt MAIN CONTINUE Replace the standard prompts .quit Exit this program // sqlite3の終了 .read FILENAME Execute SQL in FILENAME // FILENAMEに書いてあるSQLの実行 .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements // テーブルのCREATEステートメントを表示(スキーマを表示) .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .tables ?PATTERN? List names of tables matching a LIKE pattern .timeout MS Try opening locked tables for MS milliseconds .timer ON|OFF Turn the CPU timer measurement on or off .width NUM NUM ... Set column widths for "column" mode sqlite> |
出力フォーマットを変更する
sqlite3プログラムは、8つの異なるフォーマットに対応している。
“csv”、”column”、”html”、”insert”、”line”、”list”、”tabs”、”tcl”
“.mode”コマンドを使うことで、これら出力フォーマットを切り替えることができる。
“list”モード
1 2 3 4 5 |
sqlite> .mode list // リスト形式での出力に変更 sqlite> select * from tbl1; hello|10 goodbye|20 sqlite> |
“.separator”コマンドを使用すると、リストモードのセパレータを変更することができる。
例えば、カンマとスペースをセパレータにすると、
1 2 3 4 5 |
sqlite> .separator ", " // セパレータの変更 sqlite> select * from tbl1; hello, 10 goodbye, 20 sqlite> |
“line”モード
各列はデータベースの行を表しており、それぞれの行は”属性名 = データ”で表される。
連続したレコードは空行で区切られる。
1 2 3 4 5 6 7 8 |
sqlite> .mode line // "line"モードでの出力に変更 sqlite> select * from tbl1; one = hello two = 10 // 空行による区切り one = goodbye two = 20 sqlite> |
“column”モード
各レコードは対応する属性ごとに列で分けられ、各行で表示される。
1 2 3 4 5 6 7 |
sqlite> .mode column sqlite> select * from tbl1; one two ---------- ---------- hello 10 goodbye 20 sqlite> |
デフォルトでは、各列は少なくとも10文字”———-”分の幅で表示される。
列の幅が広すぎる場合、”.width”コマンドで列の幅を変更できる。
1 2 3 4 5 6 7 |
sqlite> .width 12 6 // 第一列の幅を12文字、第二列の幅を6文字に変更 sqlite> select * from tbl1; one two ------------ ------ // 12 6 文字に変更された hello 10 goodbye 20 sqlite> |
最初の2行は列の属性が出力されていた。この表示は”.header”コマンドで設定することができる。
1 2 3 4 5 |
sqlite> .header off // 属性情報の出力をoff sqlite> select * from tbl1; hello 10 // データのみを出力できた goodbye 20 sqlite> |
“insert”モードは、得られた出力を他のデータベースへの入力として使用できる。
1 2 3 4 5 6 |
sqlite> .mode insert new_table // 出力を新しいテーブルnew_tableへ挿入するモードへ変更 sqlite> select * from tbl1; // tbl1の全タプルを表示 // 出力をnew_tableへ挿入するためのコマンド発行) INSERT INTO 'new_table' VALUES('hello',10); INSERT INTO 'new_table' VALUES('goodbye',20); sqlite> |
“html”モードは、XHTMLテーブルとして結果を表示する。ただし、開始タグ
結果をファイルへ出力する
デフォルトでは、sqlite3のクエリの結果は標準出力へ送られる。”.output”コマンドを使用すると、これを変更できる。引数にファイル名を与えればよい。再び標準出力に戻すには、”.output stdout”とすればよい。
1 2 3 4 5 6 7 8 9 |
sqlite> .mode list // リストモードで表示 sqlite> .separator | // セパレータをパイプ(|)に変更 sqlite> .output test_file_1.txt // 出力先を標準出力からファイルへ変更 sqlite> select * from tbl1; // SQLクエリを発行 sqlite> .exit // 終了 $ cat test_file_1.txt // 出力結果があるファイルの中身を確認 hello|10 goodbye|20 $ // OK |