sqlite3について
概要
- アプリケーションに組み込んで利用できるsqlバックエンド
- 一応、マルチスレッドにも対応している
- 書き込み時のロックを提供する形でマルチスレッドに対応しているが、あまり歓迎されていない
- レコードを削除しても、その分の領域は開放されない
- そのため、頻繁にレコードを削除するような場合は、定期的に
VACUUM
を実行する必要がある
- そのため、頻繁にレコードを削除するような場合は、定期的に
- DBには
OLTP
とOLAP
という区分けがあり、sqliteはOLTP
OLTP
- Online Transaction Processing System
OLAP
- Online Analytical Processing system
cuiツールのinstall
debian, ubuntu
$ sudo apt-get install sqlite3
nix
$ nix profile install nixpkgs#sqlite
CUIでの基本的な使い方
新規にdbファイルを作成してテーブルを作成する
$ sqlite3 example.db 'CREATE TABLE sharks(id integer NOT NULL, name text NOT NULL, sharktype text NOT NULL, length integer NOT NULL);'
dbファイルがある時、データを挿入
$ sqlite3 example.db 'INSERT INTO sharks VALUES (1, "Sammy", "Greenland Shark", 427);'
$ sqlite3 example.db 'INSERT INTO sharks VALUES (2, "Alyoshka", "Great White Shark", 600);'
dbファイルがある時、任意のクエリを対話的に実行する
$ sqlite3 example.db
sqlite > .tables # table一覧を表示する
profile
sqlite > select * from profile limit 10; # クエリを打つ
1|ninomiya_emi@example.com|二宮 えみ|女|1978-05-17 00:00:00.000000
2|uehara_yoshiki@example.com|上原 剛基|男|1969-06-26 00:00:00.000000
3|kuramoto_chinatsu@example.com|倉本 千夏|女|1971-12-24 00:00:00.000000
4|ozaki_tetsuhiro@example.com|尾崎 鉄洋|男|1943-09-26 00:00:00.000000
5|hirabayashi_ryousuke@example.com|平林 亮介|男|1943-05-05 00:00:00.000000
6|aoi_yuri@example.com|蒼井 妃里|女|1971-06-15 00:00:00.000000
7|yamada_aoi@example.com|山田 あおい|女|1970-02-13 00:00:00.000000
8|matsushita_shou@example.com|松下 翔|男|1950-12-29 00:00:00.000000
9|iwatani_tetsuji@example.com|岩谷 鉄二|男|1982-04-18 00:00:00.000000
10|akamatsu_hidetaka@example.com|赤松 秀隆|男|1974-10-26 00:00:00.000000
sqlite> .schema profile # tableのスキーマを確認
CREATE TABLE profile (
id INTEGER NOT NULL,
email VARCHAR,
name VARCHAR,
sex VARCHAR,
birth_day DATETIME,
PRIMARY KEY (id)
);
データベースのファイルサイズを小さくする
- レコードを削除しても、その分の領域は開放されない
$ sqlite3 example.db
sqlite> VACUUM;