[基礎知識]SQLite3コマンド一覧

flutterでSQLite3を扱う際、直接SQLiteコマンドを操作する場合もあります。
flutter的な立場で操作するコマンドをまとめてあります。

1.コマンド一覧(アルファベット順(Help原文))

SQLite3を起動後ヘルプを表示させると以下の順番でコマンドの説明が表示されます。

sqliteコマンド一覧( >.help の結果):
>sqlite3
SQLite version 3.42.0 2023-05-16 12:36:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .help
.auth ON|OFF             Show authorizer callbacks
.backup ?DB? FILE        Backup DB (default "main") to FILE
.bail on|off             Stop after hitting an error.  Default OFF
.binary on|off           Turn binary output on or off.  Default OFF
.cd DIRECTORY            Change the working directory to DIRECTORY
.changes on|off          Show number of rows changed by SQL
.check GLOB              Fail if output since .testcase does not match
.clone NEWDB             Clone data into NEWDB from the existing database
.connection [close] [#]  Open or close an auxiliary database connection
.databases               List names and files of attached databases
.dbconfig ?op? ?val?     List or change sqlite3_db_config() options
.dump ?OBJECTS?          Render database content as SQL
.echo on|off             Turn command echo on or off
.eqp on|off|full|...     Enable or disable automatic EXPLAIN QUERY PLAN
.excel                   Display the output of next command in spreadsheet
.exit ?CODE?             Exit this program with return-code CODE
.expert                  EXPERIMENTAL. Suggest indexes for queries
.explain ?on|off|auto?   Change the EXPLAIN formatting mode.  Default: auto
.filectrl CMD ...        Run various sqlite3_file_control() operations
.fullschema ?--indent?   Show schema and the content of sqlite_stat tables
.headers on|off          Turn display of headers on or off
.help ?-all? ?PATTERN?   Show help text for PATTERN
.import FILE TABLE       Import data from FILE into TABLE
.indexes ?TABLE?         Show names of indexes
.limit ?LIMIT? ?VAL?     Display or change the value of an SQLITE_LIMIT
.lint OPTIONS            Report potential schema issues.
.log FILE|on|off         Turn logging on or off.  FILE can be stderr/stdout
.mode MODE ?OPTIONS?     Set output mode
.nonce STRING            Suspend safe mode for one command if nonce matches
.nullvalue STRING        Use STRING in place of NULL values
.once ?OPTIONS? ?FILE?   Output for the next SQL command only to FILE
.open ?OPTIONS? ?FILE?   Close existing database and reopen FILE
.output ?FILE?           Send output to FILE or stdout if FILE is omitted
.parameter CMD ...       Manage SQL parameter bindings
.print STRING...         Print literal STRING
.progress N              Invoke progress handler after every N opcodes
.prompt MAIN CONTINUE    Replace the standard prompts
.quit                    Stop interpreting input stream, exit if primary.
.read FILE               Read input from FILE or command output
.restore ?DB? FILE       Restore content of DB (default "main") from FILE
.save ?OPTIONS? FILE     Write database to FILE (an alias for .backup ...)
.scanstats on|off|est    Turn sqlite3_stmt_scanstatus() metrics on or off
.schema ?PATTERN?        Show the CREATE statements matching PATTERN
.separator COL ?ROW?     Change the column and row separators
.sha3sum ...             Compute a SHA3 hash of database content
.shell CMD ARGS...       Run CMD ARGS... in a system shell
.show                    Show the current values for various settings
.stats ?ARG?             Show stats or turn stats on or off
.system CMD ARGS...      Run CMD ARGS... in a system shell
.tables ?TABLE?          List names of tables matching LIKE pattern TABLE
.timeout MS              Try opening locked tables for MS milliseconds
.timer on|off            Turn SQL timer on or off
.trace ?OPTIONS?         Output each SQL statement as it is run
.version                 Show source, library and compiler versions
.vfsinfo ?AUX?           Information about the top-level VFS
.vfslist                 List all available VFSes
.vfsname ?AUX?           Print the name of the VFS stack
.width NUM1 NUM2 ...     Set minimum column widths for columnar output

2.コマンド一覧(アルファベット順(日本語訳))

上記を日本語で説明すると以下の通りになります。

コマンド / オプション説明
.auth ON|OFF 認証コールバックを表示します。
.backup ?DB? FILE 指定されたデータベース(DB)をファイルにバックアップします。
.bail on|off エラーが発生したら停止します。デフォルトはOFFです。
.binary on|off バイナリ出力をONまたはOFFにします。デフォルトはOFFです。
.cd DIRECTORY 作業ディレクトリを指定されたディレクトリに変更します。
.changes on|off SQLによって変更された行数を表示します。
.check GLOB 出力が.testcaseの後に一致しない場合に失敗します。
.clone NEWDB 既存のデータベースからNEWDBにデータをクローンします。
.connection [close] [#] 補助データベース接続を開くまたは閉じます。
.databases アタッチされたデータベースの名前とファイルを一覧表示します。
.dbconfig ?op? ?val? sqlite3_db_config()オプションを一覧表示または変更します。
.dump ?OBJECTS? データベースの内容をSQLとして表示します。
.echo on|off コマンドエコーをONまたはOFFにします。
.eqp on|off|full|… 自動EXPLAIN QUERY PLANを有効または無効にします。
.excel 次のコマンドの出力をスプレッドシートで表示します。
.exit ?CODE? このプログラムを指定されたリターンコードで終了します。
.expert インデックスの提案を行う実験的な機能です。
.explain ?on|off|auto? EXPLAINのフォーマットモードを変更します。デフォルトはautoです。
.filectrl CMD … sqlite3_file_control()操作を実行します。
.fullschema ?–indent? スキーマとsqlite_statテーブルの内容を表示します。 ヘッダーの表示をONまたはOFFにします。
.headers on|off ヘッダーの表示をONまたはOFFにします。
.help ?-all? ?PATTERN? PATTERNに一致するヘルプテキストを表示します。
.import FILE TABLE ファイルからデータをテーブルにインポートします。
.indexes ?TABLE? インデックスの名前を表示します。
.limit ?LIMIT? ?VAL? SQLITE_LIMITの値を表示または変更します。
.lint OPTIONS 潜在的なスキーマの問題を報告します。
.log FILE|on|off ログをONまたはOFFにします。FILEはstderrやstdoutを指定できます。
.mode MODE ?OPTIONS? 出力モードを設定します。
.nonce STRING nonceが一致する場合、セーフモードを一時停止します。
.nullvalue STRING NULL値の代わりにSTRINGを使用します。
.once ?OPTIONS? ?FILE? 次のSQLコマンドの出力を一度だけFILEに出力します。
.open ?OPTIONS? ?FILE? 既存のデータベースを閉じ、FILEを再オープンします。
.output ?FILE? 出力をFILEまたはstdoutに送ります。
.parameter CMD … SQLパラメータのバインディングを管理します。
.print STRING… リテラルSTRINGを表示します。
.progress N 毎Nオペコードごとに進行状況ハンドラを呼び出します。
.prompt MAIN CONTINUE 標準プロンプトを置き換えます。
.quit 入力ストリームの解釈を停止し、メインの場合は終了します。
.read FILE FILEから入力を読み取ります。
.restore ?DB? FILE FILEからDB(デフォルトは「main」)の内容を復元します。
.scanstats on|off|est sqlite3_stmt_scanstatus()メトリックをONまたはOFFにします。
.schema ?PATTERN? PATTERNに一致するCREATEステートメントを表示します。
.separator COL ?ROW? カラムと行の区切り文字を変更します。
.sha3sum … データベースの内容のSHA3ハッシュを計算します。
.shell CMD ARGS… CMD ARGS…をシステムシェルで実行します。
.show 各種設定の現在の値を表示します。
.stats ?ARG? 統計情報を表示するか、ONまたはOFFにします。
.system CMD ARGS… CMD ARGS…をシステムシェルで実行します。
.tables ?TABLE? TABLEに一致するテーブル名を一覧表示します。
.timeout MS ロックされたテーブルの開放をMSミリ秒待ちます。
.timer on|off SQLタイマーをONまたはOFFにします。

3.コマンド一覧(用途別)

上記を用途別に(使用する状況に合わせた分類をして)並べ替えると次の様になります。

3-1. データベースの管理

  1. データベースの作成・オープン・クローズ
    1. .open ?OPTIONS? ?FILE?: データベースファイルを開く。既存のデータベースを閉じ、指定されたファイルを再オープンします。
      ・–readonly: データベースを読み取り専用モードで開きます。これにより、データベースの内容を変更することなく、安全にデータを閲覧することができます。
      ・–uri: データベースファイルのURI(統一リソース識別子)を使用してデータベースを開きます。URIはファイルパスの代わりに使われる特定の形式の文字列です。
      ・–nomutex: データベースをノーマル・モードで開きます。これは複数のプロセスやスレッドから同時にアクセスする必要がない場合に使用します。
      ・–fullmutex: データベースをフル・マルチプレクシング・モードで開きます。これは、複数のプロセスやスレッドから同時に安全にアクセスできるようにするために使用されます。
      ・–private: データベースをプライベート・モードで開きます。このモードでは、共有キャッシュが使用されず、データベースファイルはプライベートになります。
      ・–shared: データベースを共有キャッシュ・モードで開きます。このモードでは、複数のデータベース接続が同じキャッシュを共有できます。
    2. .clone NEWDB: 現在接続中の既存データベースからNEWDBにデータをクローンします。
    3. .backup ?DB? FILE: 現在接続中の既存データベースや、指定されたデータベースを、ファイルにバックアップします。
    4. .restore ?DB? FILE: ファイルからデータベースを復元します。
  2. 接続の管理
    1. .connection [close] [#]: 補助データベース接続を開くまたは閉じます。
  3. 設定の確認・変更
    1. .dbconfig ?op? ?val?: sqlite3_db_config()オプションを一覧表示または変更します。

3-2. データベースの情報表示

  1. スキーマ情報
    1. .schema ?PATTERN?: PATTERNに一致するCREATEステートメントを表示します。
    2. .fullschema ?--indent?: スキーマとsqlite_statテーブルの内容を表示します。
  2. データベース構造の表示
    1. .tables ?TABLE?: TABLEに一致するテーブル名を一覧表示します。
    2. .indexes ?TABLE?: テーブルのインデックス名を表示します。
  3. データベース内容のダンプ
    1. .dump ?OBJECTS?: データベースの内容をSQLとして表示します。

3-3. データ操作

  1. データのインポート・エクスポート
    1. .import FILE TABLE: ファイルからデータをテーブルにインポートします。
    2. .once ?OPTIONS? ?FILE?: 次のSQLコマンドの出力を一度だけファイルに出力します。
    3. .output ?FILE?: 出力をファイルまたはstdoutに送ります。
  2. データの表示
    1. .print STRING...: リテラルSTRINGを表示します。
    2. .mode MODE ?OPTIONS?: 出力モードを設定します。
    3. .nullvalue STRING: NULL値の代わりにSTRINGを使用します。
    4. .headers on|off: ヘッダーの表示をONまたはOFFにします。

3-4. 診断とデバッグ

  1. エラーハンドリング
    1. .bail on|off: エラーが発生したら停止します。デフォルトはOFFです。
  2. クエリの分析
    1. .explain ?on|off|auto?: EXPLAINのフォーマットモードを変更します。デフォルトはautoです。
    2. .eqp on|off|full|...: 自動EXPLAIN QUERY PLANを有効または無効にします。
    3. .trace ?OPTIONS?: 実行される各SQLステートメントを出力します。
  3. 統計情報
    1. .stats ?ARG?: 統計情報を表示するか、ONまたはOFFにします。
    2. .scanstats on|off|est: sqlite3_stmt_scanstatus()メトリックをONまたはOFFにします。

3-5. 管理と設定

  1. 動作の制御
    1. .timeout MS: ロックされたテーブルの開放をMSミリ秒待ちます。
    2. .limit ?LIMIT? ?VAL?: SQLITE_LIMITの値を表示または変更します。
  2. 作業環境の設定
    1. .cd DIRECTORY: 作業ディレクトリを指定されたディレクトリに変更します。
    2. .prompt MAIN CONTINUE: 標準プロンプトを置き換えます。

3-6. セキュリティと認証

  1. 認証設定
    1. .auth ON|OFF: 認証コールバックを表示します。

3-7. その他

  1. システムコマンドの実行
    1. .shell CMD ARGS...: CMD ARGS…をシステムシェルで実行します。
    2. .system CMD ARGS...: CMD ARGS…をシステムシェルで実行します。
  2. ヘルプとバージョン情報
    1. .help ?-all? ?PATTERN?: PATTERNに一致するヘルプテキストを表示します。
    2. .version: ソース、ライブラリ、およびコンパイラのバージョンを表示します。
  3. 終了とログ
    1. .exit ?CODE?: このプログラムを指定されたリターンコードで終了します。
    2. .quit: 入力ストリームの解釈を停止し、メインの場合は終了します。

4.FlutterのSQLiteについて

FlutterでSQLite3を扱う為のパッケージ(sqflite、sqflite_common_ffi、等)のうち、sqflite_common_ffiによりSQLite3で作成されるデータベースは、Flutterプロジェクトの配下に作成されます。その場所は次の通りです。

Flutterプロジェクト\.dart_tool\sqflite_common_ffi\databases
↑ここに、****.db というデータベースが作成されます↑

もし上記の場所のデータベースを操作する場合は、上記の場所に移動してから、sqlite3コマンドを実行する必要があります。

cd <上記のフォルダ>
sqlite3

以降、冒頭でも書いてある通り、Flutter開発中に、よく利用する手順をまとめてあります。

1.データの確認:

(前提)データベース名:example.db、テーブル名:items

sqlite> .open example.db
sqlite> .tables
items

sqlite> .schema items
CREATE TABLE items (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT
      );

sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば

2.データの追加:

(前提)データベース名:example.db、テーブル名:items

sqlite> insert into items ( id, name ) values ( 4, '牛丼' );
sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば
4|牛丼

3.データの更新:

(前提)データベース名:example.db、テーブル名:items

sqlite> update items set name = '特盛牛丼' where id = 4;
sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば
4|特盛牛丼

4.データの削除:

(前提)データベース名:example.db、テーブル名:items
※テーブルの削除は以降の「6.テーブルの削除」を参照願います。

sqlite> delete from items where name like '%麺%';
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼

5.テーブル・データのバックアップ・復元:

(1)テーブル・データのバックアップ:

(前提)データベース名:example.db、テーブル名:items、バックアップ用ファイル:items_backup.sql

sqlite> .output items_backup.sql
sqlite> .dump items
sqlite> .output stdout

すると、バックアップファイル(items_backup.sql1)が作成されます。

このファイルの内容は次の通りです。
※意味的には、以下容はテーブルのバックアップ内容(1~9行目)になります。
 データのバックアップ内容は(7~9行目)になります。

バックアップファイル(items_backup.sql)の内容:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE items (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT
      );
INSERT INTO items VALUES(1,'カレーライス');
INSERT INTO items VALUES(3,'焼きそば');
INSERT INTO items VALUES(4,'特盛牛丼');
COMMIT;

(2)データの復元:

(前提)データベース名:example.db、テーブル名:items、バックアップ用ファイル:items_backup.sql

sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼

sqlite> delete from items;

sqlite> select * from items;
// データはすべて削除されたのでここには何も表示されません //

ここで上記(1)のバックアップファイル中にあるデータ追加用コマンド(insert文)を実行することでデータは復元されます。

sqlite> INSERT INTO items VALUES(1,'カレーライス');
sqlite> INSERT INTO items VALUES(3,'焼きそば');
sqlite> INSERT INTO items VALUES(4,'特盛牛丼');

sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼

6.テーブルの削除・復元

上記5がデータの復元であるのに対して、ここではテーブル自体の削除・復元の手順です。

sqlite> .table
items

sqlite> drop table items;
sqlite> .table
// テーブル自体が削除されているのでここにはテーブル(items)は表示されません //

sqlite> .read items_backup.sql
sqlite> .table
items
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼       // ←テーブルとデータの復元は成功です。

コメントを残す