SQLite3の基本的な使い方

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"