Quantcast
Channel: bogamp’s blog
Viewing all articles
Browse latest Browse all 39

sqlite3コマンドでデータベース

$
0
0

sqliteはファイル単体をデータベースとして扱うことができるシンプルさが魅力。
sqlite3コマンドをスクリプトなどから呼び出して使う想定(そのため対話的なコマンドは使っていない)で、使用方法をまとめてみた。

1. 基本的なSQL

データベース(ファイル名)とSQLコマンドを並べるだけでSQLを実行できる。SQLを複数実行するときは;で区切る。
指定したファイルが存在しない場合は新規作成される。

1.1 データベースとテーブルの作成

$ sqlite3 sample.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)"

ちなみにAUTOINCREMENTは公式ではパフォーマンスが落ちるため基本的には非推奨とされている(https://www.sqlite.org/autoinc.html)。
AUTOINCREMENTを使わなくても、INTEGER PRIMARY KEYを設定した場合、INSERTのときに値を設定しなければ自動でユニークな数字が割り振られる。
データ型はTEXT(文字列)、INTEGER(整数)、REAL(小数)などを使う(これについては後述)。

1.2 データの挿入、テーブル表示、データ取得

SELECT文のテーブル表示はデフォルトだと少し読みにくい。オプションで-header-columnを使うと見やすくなる。
$ sqlite3 sample.db \"INSERT INTO users (name , age ) VALUES ( 'Watanabe', 35); \INSERT INTO users (name , age ) VALUES ( 'Shimamura', 23 ); \INSERT INTO users (name , age ) VALUES ('Aoki' , 49 );"
$ sqlite3 sample.db "SELECT * FROM users;"1|Watanabe|352|Shimamura|233|Aoki|49
$ sqlite3 -header-column sample.db "SELECT * FROM users;"
id  name       age
--  ------------1   Watanabe   352   Shimamura  233   Aoki       49
$ sqlite3  sample.db "SELECT age FROM users WHERE name = 'Shimamura';"23

-json-csvのような別のフォーマットで出力するオプションもある。

$ sqlite3 -json sample.db "SELECT * FROM users;"[{"id":1,"name":"Watanabe","age":35},
{"id":2,"name":"Shimamura","age":23},
{"id":3,"name":"Aoki","age":49}]

1-3. UPDATE、DELETE

$ sqlite3 sample.db "UPDATE users SET age = 36 WHERE id = 1;"
$ sqlite3 -header-column sample.db "SELECT * FROM users;"
id  name       age
--  ------------1   Watanabe   362   Shimamura  233   Aoki       49
$ sqlite3 sample.db "DELETE FROM users WHERE name = 'Aoki'"
$ sqlite3 -header-column sample.db "SELECT * FROM users;"
id  name       age
--  ------------1   Watanabe   362   Shimamura  23

2. ドットコマンド

sqliteでは.(ドット)から始まるコマンドを使うことができる。ここでは仮にドットコマンドと呼ぶ。

2.1 テーブル一覧を表示: .tables

$ sqlite3 sample.db ".tables"
users

2.2 スキーマを表示: .schema

$ sqlite3 sample.db ".schema users"
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);

2.3 ダンプ: .dump

$ sqlite3 sample.db ".dump"
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
INSERT INTO users VALUES(1,'Watanabe',36);
INSERT INTO users VALUES(2,'Shimamura',23);
COMMIT;

2.4 ダンプを読み込む: .read

$ sqlite3 samole.db ".dump"> dump.sql
$ sqlite3 new.db ".read dump.sql"

3. 型について

sqliteのデータ型はあまり厳格ではなく、指定した型と異なるデータでもエラーは起こらない(たとえば、INTEGER型の列に文字列を挿入しようとすると、数字に変換できるときは変換され、できないときはそのまま文字列が挿入される。エラーは発生しない)。細かい動作については公式サイトの解説→https://sqlite.org/datatype3.htmlを参照のこと。

Viewing all articles
Browse latest Browse all 39

Trending Articles