sqlite3の基本的な使用方法に関するメモ
sqlite3について
超軽量級のオープンソースのデータベースアプリケーション。Microsoft Accessのようにファイル単体がDBになっていて、サーバーを必要としない。
歴史は古いが、AndroidやiOSなどのモバイルプラットフォームにおける標準的なデータベースになって存在感が増す。
商用DBなどと比較されて何かとディスられることが多いが、 クエリが結構早く、用途を間違えなければとても優秀なアプリケーションだと思われる。
インストール
Mac版はport
コマンドでsqlite3をインストールする。
Windows版はココから。
コマンドラインで実行するならexe
を、PHPなどから利用する場合はdll
をダウンロードする。
> sudo port install sqlite3
またsqlite3のDB操作を行うGUIツール
が幾つかある。シンプルでWindows、Mac、Linuxに対応したSQLite Studio
が使いやすい。
sqlite3の基本操作
DBの新規作成コマンドはない。コマンドラインからsqlite3コマンドの引数にファイルを指定する。存在しなければ新規作成
になる。存在する場合、そのデータベースをオープンする。
SQL以外の専用コマンドは「ドット.
+ コマンド名
」という形式になる。.help
を実行すると、コマンド一覧が表示される。
> sqlite3 [Database File Name]
SQLite version 3.7.14 2012-09-03 15:42:36
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
終了
sqlite> .exit
利用しているデータベース一覧
sqlite> .databases
seq name file
--- --------------- --------------------
0 main /temp/sample.sqlite3
1 temp
テーブル一覧
sqlite> .tables
データベースのダンプ
> sqlite3 [Database File] .dump > dump.sql
環境変数の表示
sqlite> .show
echo: off
explain: off
headers: off
mode: list
nullvalue: ""
output: stdout
separator: "|"
stats: off
width:
結果出力のヘッダ表示ON/OFF
sqlite> .header ON (OFF)
結果出力の表示形式変更(list, line, insert, column, html, csv)
sqlite> .mode line
sqlite> select * from sample
id = 1
num = 222
name = aaa
value = 3.5
sqlite> .mode list
sqlite> select * from sample
id|num|name|value
1|222|aaa|3.5
sqlite> .mode insert
sqlite> select * from sample
INSERT INTO table VALUES(1,222,'aaa',3.5);
sqlite> .mode column
sqlite> select * from sample
id num name value
---------- ---------- ---------- ----------
1 222 aaa 3.5
sqlite> .mode html
sqlite> select * from sample
id,num,name,value
1,222,aaa,3.5
id
num
name
sss
1
222
aaa
3.5
sqlite> .mode csv
sqlite> select * from sample
結果の出力設定(stdout, ファイル名)
stdoutを指定すると、標準出力される
sqlite> .output [ファイル名]
sqlite> .output stdout
区切り文字の設定
sqlite> .separator [文字]
nullの表示方法を任意の文字にする
sqlite> .nullvalue <null>
sqlite> select * from sample;
id num name sss
---------- ---------- ---------- ----------
1 222 aaa <null>
CSV形式のファイルからインポート
注意点として、カラム名にセパレータ文字
が入っていると、エスケープしても区切られてしまう。
> sqlite3 -separator , [Database File] ".import [CSV File] [Table Name]"
ex.)
> sqlite3 -separator , database.sqlite3 ".import data.csv tbl_sample"