SQLiteのコマンド
簡単にDBを構築したい場合に超便利なSQLite。
しかし趣味で偶にしか使わないので、毎回コマンドを忘れてしまうため備忘録として。
データベース系
データベースを作る or 接続する
sqlite dbname
dbnameのファイルが存在しなかった場合は新規に作成され、既に存在する場合はそのDBに接続する。
データベースの名前を見る
sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/sqlite/sample.db sqlite> .exit
現在接続中のDB(ファイル)のパスが表示される。
データベースの接続を切る
sqlite> .exit
又は、
sqlite> .quit
データベースのバックアップ
sqliteはデータベース毎にファイルが作成される為、そのファイルをコピーするだけでもバックアップが取れる。
.backupと.restoreコマンドを使う方法もある。
table系
tableの一覧を表示する
sqlite> .tables sample1 sample2
tableのインデックス一覧を表示する
sqlite> .indices sample name_index
tableのスキーマを確認する
sqlite> select * from sqlite_master; #*はテーブル名
下記の場合はCREATE TABLE文のみ表示される
sqlite> .schema [TABLE]
ダンプ&リストア系
ダンプコマンド
sqlite> .dump [tablename, ...] > dump.sql
tablenameは複数指定可能。指定しなかった場合は全てダンプされる。
コマンドラインからのダンプ
sqlite dbname .dump > dump.sql
リストアコマンド
sqlite> .read dump.sql
コマンドラインからのリストア
sqlite dbname < dump.sql
ファイルの入力&出力系
表示結果をファイルに出力する
sqlite> .output sample.txt #sample.txtは任意 sqlite> select * from sample; sqlite>
これでsample.txtに表示結果が出力されている。尚、出力されるフォーマットは設定値の通りになる。
つまり以下のような設定にすると、簡単なcsv形式での出力が可能となる。(エスケープ等の処理はされない)
.mode csvで出力した場合はエスケープ処理もされるが、そのままインポートが出来ないので注意が必要。
sqlite> .output sample.csv sqlite> .separator "," sqlite> select * from sample;
ファイルからデータをインポートする
sqlite> .import sample.txt sample #.import ファイル名 table名
ただし、区切り文字が設定値と一致しなければならない。
出力設定系
現在の設定値を表示する
sqlite> .show echo: off explain: off headers: off mode: list nullvalue: "" output: stdout separator: "|" width:
各項目は以下のコマンドで変更できる
実行したSQLを復唱する
OFFの場合(通常)
sqlite> .echo OFF sqlite> select * from sample;
ONの場合
sqlite> .echo ON sqlite> select * from sample; select * from sample; #復唱されている
explainの結果を見やすくする
OFFの場合(通常)
sqlite> .explain OFF sqlite> explain select * from sample; 0|Goto|0|13| 1|Integer|0|0| 2|OpenRead|0|2| ...
ONの場合
sqlite> .explain ON sqlite> explain select * from sample; addr opcode p1 p2 p3 ---- -------------- ---------- ---------- --------------------------------- 0 Goto 0 13 1 Integer 0 0 2 OpenRead 0 2 ...
.explain ON後は、headers: on、headers: onになっている為、通常のSELECT結果も同様の表示結果となる
SELECT結果でテーブルのヘッダーを表示する
ONの場合
sqlite> .header ON sqlite> select * from sample; id|user|type|name #これがヘッダー 1|root|A|vaice 2|dbuser|B|tanaka
OFF(通常)の場合
sqlite> .header OFF sqlite> select * from sample; select * from sample; 1|root|A|vaice 2|dbuser|B|tanaka
SELECT結果のフォーマットを変更する
sqlite> .mode [MODE]
[MODE]の種類は以下
MODE | 説明 |
---|---|
csv | CSV形式 |
column | 幅の揃ったテーブル形式で表示される |
html | TRタグ、TDタグを使ったHTMLのテーブルとして表示される |
insert | INSERT文で表示される |
line | clumn名 = value値 のペアで1行ずつ表示される |
list | デフォルト値。separatorの値で左詰で表示される |
tabs | タブ区切りで表示される |
tcl | tcl文法で表示される |
表示結果の出力先を変更する
ファイルに出力する
sqlite> .output sample.txt #sample.txtは任意 sqlite> select * from sample; sqlite>
詳しくは「表示結果をファイルに出力する」の項目を参照。
標準出力に戻す場合は以下。
sqlite> .output stdout
データがnullだった場合の表示を指定する
sqlite> .nullvalue "NULL" #デフォルトは""(空)
データの区切り文字を指定する
sqlite> .separator "," #デフォルトは"|"
カラムの横幅を指定する
modeがcolumnの時のみ有効。
sqlite> .width "10" #デフォルトは""
スペース区切りで左から順に指定可能。
sqlite> .width "5 5 10 10"