はじめてSQLite3を使ってみたまとめ

今まで仕事の開発ではリッチなSQL ServerとかOracleしか触った事がない環境だった。

今回はSQLiteを使う必要があって調べてみました。SQL*Plusみたいなものですね。

DBD::SQLiteSQLiteごとインストール。

perl -MCPAN -e 'install "DBD::SQLite"'
perl -MDBD::SQLite -e 'print $DBD::SQLite::VERSION'

データベースに接続

sqlite3 hoge.db


以下はsqlite>のモードでの専用コマンド

データベース一覧

.database

テーブル一覧

.table

SQL文。とりあえずセミコロン;つけるだけでおk

select * from hoge;

ファイル読み込み

.read filename

終了

.quit
.exit

Control + dでも終了できる。



データ型について

    • NULL   値は NULL 値です。
    • INTEGER  値は符号付き整数です。必要に応じて 1、2、3、4、6、8 バイトで格納されます。
    • REAL   値は浮動小数値です。8バイトの IEEE 浮動小数点数で格納されます。
    • TEXT   値はテキスト文字列です。データベースエンコーディングUTF-8、UTF-16BE、UTF-16-LE)で格納されます。
    • BLOB   値はBLOBです。入力そのままに格納されます。


型があるものの、ものすごくフリーダム。エラーにもならないのですね。

TEXTに数値を入れると文字列とするなど勝手に変換するし、INTEGERに文字列を入れると文字列のまま格納されるのであんまり意味はない。


PKかつautonumber、auto-incrementなフィールドの作成方法

つまり,SQLite で auto-increment なフィールドを作りたければ,
INTEGER PRIMARY KEY を指定してあげればいいらしい

2.XX系と3.XX系のバージョンどちらでもNOT NULLつけても大丈夫だそうです。


hoge.sqlの作成

CREATE TABLE test (
        id         INTEGER PRIMARY KEY,
        name       VARCHAR(255) NOT NULL,
        UNIQUE(name)
);

hoge.dbにfuga.sqlを実行

sqlite3 hoge.db < fuga.sql 


日付関数 datetimeの扱い
insert時の時間がおかしかったので調べたら、datetime('now', 'localtime')にすると日本のタイムゾーンに対応できた。

sqlite> select datetime('now')
   ...> , datetime('now', 'localtime');
2008-12-21 13:00:24|2008-12-21 22:00:24


FireFoxアドオン - SQLite Manager


その他参考サイト