sqlite3コマンド チートシート

cheatsheet

目的別 SQLite3 コマンドラインインターフェース操作ガイド

sqlite3 コマンドラインツールを起動し、データベースに接続したり、ツールを終了したりする方法です。

コマンドはターミナル(シェル)で直接実行するものと、sqlite3 の対話モード (sqlite> プロンプト) で実行するものがあります。文脈で判断してください。
目的 コマンド形式 (ターミナル) 説明
新しい/既存のDBファイルを開いて起動
sqlite3 データベースファイル名.db
指定したファイル名のデータベースを開きます。存在しない場合は新規作成されます(ただし、何か操作を行うまでファイルは実際には作成されません)。
インメモリデータベースで起動
sqlite3 :memory:
ファイルを作成せず、メモリ上でのみ動作する一時的なデータベースを使用します。プロセス終了時にデータは消えます。
読み取り専用モードで起動
sqlite3 -readonly データベースファイル名.db
データベースを読み取り専用で開きます。変更操作はできません。
起動時にSQLファイルを実行
sqlite3 データベースファイル名.db < sqlファイル名.sql
または
sqlite3 データベースファイル名.db ".read sqlファイル名.sql"
起動と同時に指定したSQLファイルの内容を実行します。後者は対話モードを経由せずに実行する場合に便利です。
sqlite3 プロンプトを終了
.exit
または
.quit
sqlite3 の対話モードを終了します。Ctrl+Dでも終了できます。

データベースファイル自体に関する操作や、接続中のデータベースに関する情報を表示します。

目的 コマンド形式 (sqlite> プロンプト) 説明
接続中のデータベースファイル一覧表示
.databases
現在アタッチされているデータベース(メイン、temp、その他ATTACHされたDB)の一覧とファイルパスを表示します。
データベースの整合性チェック
PRAGMA integrity_check;
データベースファイルが破損していないかチェックします。問題なければ “ok” と表示されます。
データベースのバックアップ
.backup メインDB名 バックアップファイル名.db
(例:
.backup main backup.db
)
または
sqlite3 元DB.db ".backup 先DB.db"
(ターミナル)
オンラインバックアップ(データベースを使用しながらバックアップ)を行います。ターミナルからの実行も可能です。
データベースの復元
.restore メインDB名 バックアップファイル名.db
(例:
.restore main backup.db
)
または
sqlite3 復元先DB.db ".restore バックアップ元DB.db"
(ターミナル)
バックアップファイルからデータベースを復元します。復元先のデータベースは上書きされます。
別のデータベースファイルをアタッチ
ATTACH DATABASE '別DBファイル名.db' AS 別名;
(例:
ATTACH DATABASE 'another.db' AS other;
)
現在の接続に別のデータベースファイルを追加で関連付けます。`別名.テーブル名` のようにアクセスできます。
アタッチしたデータベースをデタッチ
DETACH DATABASE 別名;
(例:
DETACH DATABASE other;
)
アタッチしたデータベースの関連付けを解除します。
データベースファイルの最適化
VACUUM;
削除されたデータ領域を解放し、データベースファイルを再構築して最適化します。ファイルサイズが小さくなることがあります。

データベース内のテーブルやインデックスの作成、変更、削除を行います (Data Definition Language)。

目的 コマンド形式 (sqlite> プロンプト) 説明
テーブル一覧表示
.tables
または
.tables パターン
データベース内のテーブル名を一覧表示します。LIKE パターンで絞り込みも可能です (例: `.tables user%`)。
テーブルのスキーマ表示 (CREATE文)
.schema テーブル名
指定したテーブルを作成した `CREATE TABLE` 文を表示します。テーブル構造の確認に役立ちます。
全テーブル・インデックスのスキーマ表示
.schema
データベース内の全てのテーブル、インデックス等の `CREATE` 文を表示します。
テーブル作成
CREATE TABLE テーブル名 (
  列名1 データ型 制約,
  列名2 データ型,
  ...
);
(例:
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT UNIQUE
);
)
新しいテーブルを作成します。データ型 (INTEGER, REAL, TEXT, BLOB, NUMERIC) や制約 (PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, CHECK, FOREIGN KEY) を指定します。
テーブル削除
DROP TABLE テーブル名;
(例:
DROP TABLE users;
)
指定したテーブルをデータごと削除します。注意して実行してください。
テーブル名変更
ALTER TABLE 旧テーブル名 RENAME TO 新テーブル名;
(例:
ALTER TABLE users RENAME TO customers;
)
テーブルの名前を変更します。
テーブルに列を追加
ALTER TABLE テーブル名 ADD COLUMN 列名 データ型 制約;
(例:
ALTER TABLE users ADD COLUMN age INTEGER DEFAULT 0;
)
既存のテーブルに新しい列を追加します。制約も指定可能です。
テーブルの列名を変更 (SQLite 3.25.0+)
ALTER TABLE テーブル名 RENAME COLUMN 旧列名 TO 新列名;
(例:
ALTER TABLE users RENAME COLUMN email TO email_address;
)
既存のテーブルの列名を変更します。比較的新しい機能です。
テーブルから列を削除 (SQLite 3.35.0+)
ALTER TABLE テーブル名 DROP COLUMN 列名;
(例:
ALTER TABLE users DROP COLUMN age;
)
既存のテーブルから列を削除します。比較的新しい機能です。古いバージョンでは直接削除できず、テーブル再作成が必要です。
インデックス一覧表示
.indexes テーブル名
指定したテーブルに作成されているインデックス名を一覧表示します。
インデックス作成
CREATE INDEX インデックス名 ON テーブル名 (列名1, 列名2, ...);
(例:
CREATE INDEX idx_users_email ON users (email);
)
テーブルの特定の列にインデックスを作成し、検索速度を向上させます。
ユニークインデックス作成
CREATE UNIQUE INDEX インデックス名 ON テーブル名 (列名1, ...);
重複しない値を持つことを保証するインデックスを作成します。
インデックス削除
DROP INDEX インデックス名;
(例:
DROP INDEX idx_users_email;
)
指定したインデックスを削除します。

テーブル内のデータを挿入、更新、削除します (Data Manipulation Language)。

目的 コマンド形式 (sqlite> プロンプト) 説明
データ挿入 (INSERT)
INSERT INTO テーブル名 (列名1, 列名2) VALUES (値1, 値2);
(例:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
)
または 列名を省略 (全列指定):
INSERT INTO users VALUES (1, 'Bob', 'bob@example.com', 30);
テーブルに新しい行(レコード)を追加します。列名を指定する形式が推奨されます。
複数行データ挿入
INSERT INTO テーブル名 (列1, 列2) VALUES
  (値A1, 値A2),
  (値B1, 値B2),
  (値C1, 値C2);
一度に複数の行を挿入します。
データ更新 (UPDATE)
UPDATE テーブル名 SET 列名1 = 新しい値1, 列名2 = 新しい値2 WHERE 条件;
(例:
UPDATE users SET age = 31 WHERE name = 'Alice';
)
条件に一致する行のデータを更新します。`WHERE`句を省略すると全行が更新されるため注意が必要です。
データ削除 (DELETE)
DELETE FROM テーブル名 WHERE 条件;
(例:
DELETE FROM users WHERE id = 1;
)
条件に一致する行を削除します。`WHERE`句を省略すると全行が削除されるため注意が必要です。
全データ削除 (高速)
DELETE FROM テーブル名;

または
TRUNCATE TABLE テーブル名;
(※ SQLiteにTRUNCATEは直接ないがDELETEで代用)
テーブル内の全データを削除します。DELETEは行ごとに削除処理をするため低速な場合があります。より高速な方法はテーブルをDROPして再CREATEすることです。
挿入または置換 (REPLACE)
REPLACE INTO テーブル名 (列1, 列2) VALUES (値1, 値2);
主キーやユニーク制約が重複する場合、既存の行を削除してから新しい行を挿入します。重複しない場合は通常のINSERTと同じです。`INSERT OR REPLACE INTO …` と同等です。
挿入または無視 (IGNORE)
INSERT OR IGNORE INTO テーブル名 (列1, 列2) VALUES (値1, 値2);
主キーやユニーク制約が重複する場合、挿入を行わずエラーも発生させません。重複しない場合は通常のINSERTと同じです。
挿入または更新 (UPSERT)
INSERT INTO テーブル名 (列1, 列2, 列3) VALUES (値1, 値2, 値3)
ON CONFLICT(重複判定列) DO UPDATE SET 更新列 = 更新値;
(例:
INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'new_alice@example.com')
ON CONFLICT(id) DO UPDATE SET email = excluded.email;
)
主キーや指定した列で重複が発生した場合にUPDATE処理を行います。`excluded.列名`で挿入しようとした値を使えます。(SQLite 3.24.0+)

テーブルからデータを検索・取得します。

目的 コマンド形式 (sqlite> プロンプト) 説明
全列・全行取得
SELECT * FROM テーブル名;
(例:
SELECT * FROM users;
)
指定したテーブルの全ての列と行を取得します。
指定した列を取得
SELECT 列名1, 列名2 FROM テーブル名;
(例:
SELECT name, email FROM users;
)
指定した列のみを取得します。
条件を指定して取得 (WHERE)
SELECT * FROM テーブル名 WHERE 条件;
(例:
SELECT * FROM users WHERE age > 20;
)
`WHERE`句で指定した条件に一致する行のみを取得します。比較演算子 (`=`, `!=`, `<`, `>`, `<=`, `>=`) や論理演算子 (`AND`, `OR`, `NOT`) が使えます。
並び替え (ORDER BY)
SELECT * FROM テーブル名 ORDER BY 列名 [ASC|DESC];
(例:
SELECT * FROM users ORDER BY age DESC;
)
指定した列の値で結果を並び替えます。`ASC` (昇順、デフォルト) または `DESC` (降順) を指定できます。
取得件数制限 (LIMIT)
SELECT * FROM テーブル名 LIMIT 件数;
(例:
SELECT * FROM users LIMIT 10;
)
取得する行数を制限します。
取得開始位置指定 (OFFSET)
SELECT * FROM テーブル名 LIMIT 件数 OFFSET 開始位置;
(例:
SELECT * FROM users LIMIT 10 OFFSET 20;
)
指定した位置から始まる行を取得します (0始まり)。ページネーションの実装などに使います。`LIMIT` と併用します。
重複を除外 (DISTINCT)
SELECT DISTINCT 列名 FROM テーブル名;
(例:
SELECT DISTINCT country FROM users;
)
指定した列の値で重複するものを除外して取得します。
グループ化 (GROUP BY) と集計関数
SELECT 列名, COUNT(*), AVG(数値列) FROM テーブル名 GROUP BY 列名 HAVING 条件;
(例:
SELECT country, COUNT(*) FROM users GROUP BY country HAVING COUNT(*) > 5;
)
指定した列の値でグループ化し、集計関数 (`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`) を適用します。`HAVING`句でグループ化後の結果に条件を指定できます。
テーブル結合 (JOIN)
SELECT * FROM テーブル1
INNER JOIN テーブル2 ON テーブル1.共通列 = テーブル2.共通列;
(例: `LEFT JOIN`, `CROSS JOIN` なども使用可能)
複数のテーブルを関連する列を基に結合してデータを取得します。`INNER JOIN` (内部結合), `LEFT JOIN` (左外部結合) などがあります。
サブクエリ
SELECT * FROM テーブル名 WHERE 列名 IN (SELECT 列 FROM 別テーブル WHERE 条件);
`SELECT` 文の中に別の `SELECT` 文(サブクエリ)を埋め込んで、複雑な条件を指定します。`WHERE`句、`SELECT`句、`FROM`句などで使用できます。
共通テーブル式 (WITH)
WITH 一時テーブル名 AS (SELECT ... )
SELECT * FROM 一時テーブル名 WHERE ...;
(例:
WITH regional_sales AS (SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region)
SELECT region, total_sales FROM regional_sales WHERE total_sales > 1000;
)
複雑なクエリを分割し、一時的な名前付き結果セット(CTE)を定義して、クエリを読みやすく、構造化します。再帰クエリも可能です。

sqlite3 の対話モードで利用できる、SQL ではない特別なコマンドです。`.` (ドット) で始まります。

コマンド 説明
`.help`利用可能なメタコマンドの一覧を表示します。
.help
`.tables`テーブル一覧を表示します。
.tables
`.schema [テーブル名]`テーブルやインデックスのスキーマ (CREATE 文) を表示します。引数なしで全スキーマ。
.schema users
`.databases`アタッチされているデータベースファイル一覧を表示します。
.databases
`.quit` / `.exit`sqlite3 を終了します。
.exit
`.header on|off`クエリ結果のヘッダー (列名) 表示を切り替えます。
.header on
`.mode モード名`クエリ結果の出力形式を変更します。モード名: `list` (デフォルト), `column`, `csv`, `html`, `json`, `markdown`, `table` など。
.mode csv
.mode column
.mode json
`.separator 文字列``list` モード (デフォルト) や `csv` モードでの区切り文字を指定します。
.separator ","
(CSVモード用)
.separator "\t"
(TSV用)
`.output [ファイル名]`クエリ結果の出力先をファイルに切り替えます。引数なしで標準出力に戻します。
.output result.txt
SELECT * FROM users;
.output
`.import ファイル名 テーブル名`ファイルからデータをテーブルにインポートします。ファイル形式は現在の `.mode` と `.separator` に依存します (CSV/TSVが多い)。
.mode csv
.import data.csv users
`.dump [テーブル名]`データベース全体または指定したテーブルの内容を SQL 文 (CREATE TABLE と INSERT) として出力します。バックアップや移行に便利です。
.output backup.sql
.dump
.output
`.read ファイル名`ファイルに書かれた SQL 文やメタコマンドを実行します。
.read setup.sql
`.timer on|off`クエリの実行時間を計測・表示するかどうかを切り替えます。
.timer on
`.show`現在の各種設定値 (モード、ヘッダー、区切り文字など) を表示します。
.show
`.width 数値 数値 …``column` モードでの各列の表示幅を指定します。負の値は右寄せ。
.mode column
.width 10 20 -15
`.nullvalue 文字列`NULL 値の表示に使われる文字列を指定します。デフォルトは空文字列。
.nullvalue "NULL"
`.backup [DB名] ファイル名`オンラインバックアップを作成します。
.backup backup.db
`.restore [DB名] ファイル名`バックアップファイルからデータベースを復元します。
.restore backup.db
`.explain [on|off|auto|query plan]``EXPLAIN QUERY PLAN` の出力を制御します。`on` または `query plan` でクエリプランを表示します。
.explain on
SELECT * FROM users WHERE id = 1;
`.lint options…`スキーマやクエリの問題点をチェックします (例: `fkey-indexes`)。
.lint fkey-indexes

データをファイルから読み込んだり、ファイルへ書き出したりする操作です。メタコマンドを使う方法と、シェルリダイレクトを使う方法があります。

注意: .import コマンドは指定されたテーブルが存在しない場合、ファイルの1行目をヘッダー行とみなし、それに基づいてテーブルを自動作成しようとします。既存テーブルにインポートする場合は、ファイルの形式(列数、区切り文字)がテーブルスキーマと合っている必要があります。

ファイルからのインポート

目的 方法
CSV ファイルからインポート メタコマンド .import を使用。
事前に .mode csv と必要であれば .separator を設定。
-- sqlite> プロンプトで実行
.mode csv
.separator ,
.import users_data.csv users

またはシェルから:

sqlite3 mydatabase.db ".mode csv" ".import users_data.csv users"
TSV (タブ区切り) ファイルからインポート メタコマンド .import を使用。
事前に .separator "\t" (タブ文字) を設定。.mode list (デフォルト) のままでも良い場合がある。
-- sqlite> プロンプトで実行
.separator "\t"
.import products_data.tsv products
SQL ファイルを実行してインポート メタコマンド .read を使用。
SQL ファイルには `CREATE TABLE` や `INSERT INTO` 文が含まれている想定。
-- sqlite> プロンプトで実行
.read dump.sql

またはシェルからリダイレクト:

sqlite3 mydatabase.db < dump.sql

ファイルへのエクスポート

目的 方法
CSV ファイルへエクスポート メタコマンド .mode csv, .separator, .output を使用。
-- sqlite> プロンプトで実行
.header on
.mode csv
.separator ,
.output users_export.csv
SELECT * FROM users;
.output stdout -- 出力先を元に戻す

またはシェルから:

sqlite3 -header -csv mydatabase.db "SELECT * FROM users;" > users_export.csv
JSON 形式でエクスポート メタコマンド .mode json.output を使用。
-- sqlite> プロンプトで実行
.mode json
.output data.json
SELECT * FROM products WHERE category = 'Electronics';
.output stdout

またはシェルから (SQLite 3.33.0+):

sqlite3 -json mydatabase.db "SELECT * FROM products;" > products.json
SQL (ダンプ) 形式でエクスポート メタコマンド .dump.output を使用。
-- sqlite> プロンプトで実行
.output backup.sql
.dump
.output stdout

またはシェルから:

sqlite3 mydatabase.db .dump > backup.sql
テーブル形式 (整形済みテキスト) でエクスポート メタコマンド .mode table (または column), .header on, .output を使用。
-- sqlite> プロンプトで実行
.header on
.mode table
.output report.txt
SELECT name, price FROM products ORDER BY price DESC LIMIT 5;
.output stdout

またはシェルから (SQLite 3.37.0+):

sqlite3 -table -header mydatabase.db "SELECT name, price FROM products LIMIT 5;" > report.txt

sqlite3 コマンドラインツールの動作や表示をカスタマイズしたり、データベースに関する詳細情報を表示したりします。

目的 コマンド/設定 説明
現在の設定を表示
.show
出力モード、ヘッダー表示、区切り文字、NULL値表現など、現在の設定値を一覧表示します。
出力モード変更
.mode モード名
出力形式を変更します (`list`, `column`, `csv`, `html`, `json`, `markdown`, `table` など)。
ヘッダー表示切替
.header on|off
SELECT 結果の先頭に列名を表示するかどうかを切り替えます。
列幅設定 (`column` モード)
.width 数値 ...
`column` モードでの各列の表示幅を指定します。
NULL 値の表示文字設定
.nullvalue 文字列
NULL 値をどのように表示するか設定します。
実行時間計測
.timer on|off
各 SQL 文の実行時間を表示するかどうかを切り替えます。
クエリプラン表示設定
.explain [on|off|auto|query plan]
クエリ実行時にクエリプラン (SQLite がどのようにクエリを実行するか) を表示するか設定します。パフォーマンスチューニングに役立ちます。
SQLite バージョン表示
SELECT sqlite_version();
または シェルで
sqlite3 --version
使用している SQLite ライブラリのバージョンを表示します。
コンパイルオプション表示
PRAGMA compile_options;
現在の SQLite ライブラリがどのようなオプション付きでコンパイルされたかを表示します。有効な機能などを確認できます。
外部キー制約の有効/無効化
PRAGMA foreign_keys = ON;
PRAGMA foreign_keys = OFF;
外部キー制約のチェックを有効または無効にします。デフォルトは OFF の場合が多いです。
ジャーナルモード確認/設定
PRAGMA journal_mode;
PRAGMA journal_mode = モード名;
(例: `DELETE`, `TRUNCATE`, `PERSIST`, `MEMORY`, `WAL`, `OFF`)
トランザクションの原子性を保証するためのジャーナリング方式を確認・設定します。`WAL` (Write-Ahead Logging) は同時読み書き性能が高いです。
キャッシュサイズ設定 (ページ数)
PRAGMA cache_size;
PRAGMA cache_size = ページ数;
(例: `PRAGMA cache_size = 4000;` 約4MB)
SQLite がメモリ上に保持するデータベースページの最大数を設定します。負の値でKB単位指定も可能 (例: `-4000` で 4000KB)。パフォーマンスに影響します。
同期設定確認/設定
PRAGMA synchronous;
PRAGMA synchronous = レベル;
(レベル: `0`=OFF, `1`=NORMAL, `2`=FULL(デフォルト), `3`=EXTRA)
ディスクへの書き込み同期レベルを設定します。安全性を取るか速度を取るかのトレードオフがあります。`OFF` は高速ですが、OSクラッシュなどでデータが破損するリスクがあります。`WAL` モードでは通常 `NORMAL` で十分な場合が多いです。

トランザクション制御、シェルの拡張機能、特殊なSQL関数など、より高度な使い方です。

目的 コマンド/構文 (sqlite> プロンプト) 説明
トランザクション開始
BEGIN;
または
BEGIN TRANSACTION;
一連のデータベース操作をアトミック(不可分)にするトランザクションを開始します。
トランザクションのコミット
COMMIT;
または
END TRANSACTION;
トランザクション内の変更を確定し、データベースに永続化します。
トランザクションのロールバック
ROLLBACK;
トランザクション内の変更を取り消し、トランザクション開始前の状態に戻します。
セーブポイントの設定
SAVEPOINT セーブポイント名;
(例:
SAVEPOINT sp1;
)
トランザクション内に中間的なポイントを設定します。部分的なロールバックが可能になります。
セーブポイントまでロールバック
ROLLBACK TO セーブポイント名;
(例:
ROLLBACK TO sp1;
)
指定したセーブポイント以降の変更を取り消します。
セーブポイントの解放
RELEASE セーブポイント名;
(例:
RELEASE sp1;
)
指定したセーブポイントを削除します。COMMIT または ROLLBACK でも自動的に削除されます。
JSON 関数の利用 (SQLite 3.9.0+)
json(), json_array(), json_object(), json_extract(), json_insert(), json_replace(), json_remove(), json_type(), json_valid(), json_group_array(), json_group_object() など
JSON データの生成、解析、操作を行うための組み込み関数群です。(例:
SELECT json_extract(data, '$.name') FROM events WHERE json_valid(data);
)
全文検索 (FTS) の利用 `CREATE VIRTUAL TABLE … USING fts5(…)` などで FTS 用テーブルを作成し、`MATCH` 演算子で検索。 大量のテキストデータに対する高速な全文検索機能 (FTS3/4, FTS5) を利用します。設定や使い方はやや複雑です。 (例:
SELECT * FROM documents WHERE documents MATCH 'sqlite database';
)
ウィンドウ関数の利用 (SQLite 3.25.0+)
関数() OVER (PARTITION BY ... ORDER BY ... フレーム指定)
(例: `ROW_NUMBER`, `RANK`, `DENSE_RANK`, `LAG`, `LEAD`, `SUM`, `AVG` など)
現在の行に関連する行のセット(ウィンドウ)に対して集計や計算を行います。ランキング、移動平均などに利用できます。(例:
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) as rank FROM employees;
)
コマンド履歴の利用 上下矢印キー 対話モードで過去に入力したコマンドを呼び出して再利用します。(Readline ライブラリが有効な場合)
コマンドラインオプション (起動時)
sqlite3 [オプション] [データベースファイル] [SQL文]
起動時に様々なオプションを指定できます。例: `-init file` (初期化ファイル指定), `-echo` (実行コマンド表示), `-batch` (バッチモード), `-cmd command` (最初に実行するコマンド), `-help` (ヘルプ表示) など。
シェルの拡張機能をロード
.load './拡張ファイル名.so' [エントリーポイント]
(Linux/macOS)
.load '.\\拡張ファイル名.dll' [エントリーポイント]
(Windows)
C 言語などで作成された共有ライブラリ (拡張機能) を読み込み、カスタム SQL 関数や仮想テーブルなどを追加します。

コメント

タイトルとURLをコピーしました