目的別 SQLite3 コマンドラインインターフェース操作ガイド
⚙️ 起動と終了
sqlite3 コマンドラインツールを起動し、データベースに接続したり、ツールを終了したりする方法です。
目的 | コマンド形式 (ターミナル) | 説明 |
---|---|---|
新しい/既存のDBファイルを開いて起動 |
|
指定したファイル名のデータベースを開きます。存在しない場合は新規作成されます(ただし、何か操作を行うまでファイルは実際には作成されません)。 |
インメモリデータベースで起動 |
|
ファイルを作成せず、メモリ上でのみ動作する一時的なデータベースを使用します。プロセス終了時にデータは消えます。 |
読み取り専用モードで起動 |
|
データベースを読み取り専用で開きます。変更操作はできません。 |
起動時にSQLファイルを実行 | または
|
起動と同時に指定したSQLファイルの内容を実行します。後者は対話モードを経由せずに実行する場合に便利です。 |
sqlite3 プロンプトを終了 | または
|
sqlite3 の対話モードを終了します。Ctrl+Dでも終了できます。 |
💾 データベース操作
データベースファイル自体に関する操作や、接続中のデータベースに関する情報を表示します。
目的 | コマンド形式 (sqlite> プロンプト) | 説明 |
---|---|---|
接続中のデータベースファイル一覧表示 |
|
現在アタッチされているデータベース(メイン、temp、その他ATTACHされたDB)の一覧とファイルパスを表示します。 |
データベースの整合性チェック |
|
データベースファイルが破損していないかチェックします。問題なければ “ok” と表示されます。 |
データベースのバックアップ | (例: ) または (ターミナル) |
オンラインバックアップ(データベースを使用しながらバックアップ)を行います。ターミナルからの実行も可能です。 |
データベースの復元 | (例: ) または (ターミナル) |
バックアップファイルからデータベースを復元します。復元先のデータベースは上書きされます。 |
別のデータベースファイルをアタッチ | (例: ) |
現在の接続に別のデータベースファイルを追加で関連付けます。`別名.テーブル名` のようにアクセスできます。 |
アタッチしたデータベースをデタッチ | (例: ) |
アタッチしたデータベースの関連付けを解除します。 |
データベースファイルの最適化 |
|
削除されたデータ領域を解放し、データベースファイルを再構築して最適化します。ファイルサイズが小さくなることがあります。 |
📊 テーブル操作 (DDL)
データベース内のテーブルやインデックスの作成、変更、削除を行います (Data Definition Language)。
目的 | コマンド形式 (sqlite> プロンプト) | 説明 |
---|---|---|
テーブル一覧表示 | または
|
データベース内のテーブル名を一覧表示します。LIKE パターンで絞り込みも可能です (例: `.tables user%`)。 |
テーブルのスキーマ表示 (CREATE文) |
|
指定したテーブルを作成した `CREATE TABLE` 文を表示します。テーブル構造の確認に役立ちます。 |
全テーブル・インデックスのスキーマ表示 |
|
データベース内の全てのテーブル、インデックス等の `CREATE` 文を表示します。 |
テーブル作成 | (例: ) |
新しいテーブルを作成します。データ型 (INTEGER, REAL, TEXT, BLOB, NUMERIC) や制約 (PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT, CHECK, FOREIGN KEY) を指定します。 |
テーブル削除 | (例: ) |
指定したテーブルをデータごと削除します。注意して実行してください。 |
テーブル名変更 | (例: ) |
テーブルの名前を変更します。 |
テーブルに列を追加 | (例: ) |
既存のテーブルに新しい列を追加します。制約も指定可能です。 |
テーブルの列名を変更 (SQLite 3.25.0+) | (例: ) |
既存のテーブルの列名を変更します。比較的新しい機能です。 |
テーブルから列を削除 (SQLite 3.35.0+) | (例: ) |
既存のテーブルから列を削除します。比較的新しい機能です。古いバージョンでは直接削除できず、テーブル再作成が必要です。 |
インデックス一覧表示 |
|
指定したテーブルに作成されているインデックス名を一覧表示します。 |
インデックス作成 | (例: ) |
テーブルの特定の列にインデックスを作成し、検索速度を向上させます。 |
ユニークインデックス作成 |
|
重複しない値を持つことを保証するインデックスを作成します。 |
インデックス削除 | (例: ) |
指定したインデックスを削除します。 |
✏️ データ操作 (DML)
テーブル内のデータを挿入、更新、削除します (Data Manipulation Language)。
目的 | コマンド形式 (sqlite> プロンプト) | 説明 |
---|---|---|
データ挿入 (INSERT) | (例: ) または 列名を省略 (全列指定):
|
テーブルに新しい行(レコード)を追加します。列名を指定する形式が推奨されます。 |
複数行データ挿入 |
|
一度に複数の行を挿入します。 |
データ更新 (UPDATE) | (例: ) |
条件に一致する行のデータを更新します。`WHERE`句を省略すると全行が更新されるため注意が必要です。 |
データ削除 (DELETE) | (例: ) |
条件に一致する行を削除します。`WHERE`句を省略すると全行が削除されるため注意が必要です。 |
全データ削除 (高速) | または (※ SQLiteにTRUNCATEは直接ないがDELETEで代用) |
テーブル内の全データを削除します。DELETEは行ごとに削除処理をするため低速な場合があります。より高速な方法はテーブルをDROPして再CREATEすることです。 |
挿入または置換 (REPLACE) |
|
主キーやユニーク制約が重複する場合、既存の行を削除してから新しい行を挿入します。重複しない場合は通常のINSERTと同じです。`INSERT OR REPLACE INTO …` と同等です。 |
挿入または無視 (IGNORE) |
|
主キーやユニーク制約が重複する場合、挿入を行わずエラーも発生させません。重複しない場合は通常のINSERTと同じです。 |
挿入または更新 (UPSERT) | (例: ) |
主キーや指定した列で重複が発生した場合にUPDATE処理を行います。`excluded.列名`で挿入しようとした値を使えます。(SQLite 3.24.0+) |
🔍 クエリ実行 (SELECT)
テーブルからデータを検索・取得します。
目的 | コマンド形式 (sqlite> プロンプト) | 説明 |
---|---|---|
全列・全行取得 | (例: ) |
指定したテーブルの全ての列と行を取得します。 |
指定した列を取得 | (例: ) |
指定した列のみを取得します。 |
条件を指定して取得 (WHERE) | (例: ) |
`WHERE`句で指定した条件に一致する行のみを取得します。比較演算子 (`=`, `!=`, `<`, `>`, `<=`, `>=`) や論理演算子 (`AND`, `OR`, `NOT`) が使えます。 |
並び替え (ORDER BY) | (例: ) |
指定した列の値で結果を並び替えます。`ASC` (昇順、デフォルト) または `DESC` (降順) を指定できます。 |
取得件数制限 (LIMIT) | (例: ) |
取得する行数を制限します。 |
取得開始位置指定 (OFFSET) | (例: ) |
指定した位置から始まる行を取得します (0始まり)。ページネーションの実装などに使います。`LIMIT` と併用します。 |
重複を除外 (DISTINCT) | (例: ) |
指定した列の値で重複するものを除外して取得します。 |
グループ化 (GROUP BY) と集計関数 | (例: ) |
指定した列の値でグループ化し、集計関数 (`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`) を適用します。`HAVING`句でグループ化後の結果に条件を指定できます。 |
テーブル結合 (JOIN) | (例: `LEFT JOIN`, `CROSS JOIN` なども使用可能) |
複数のテーブルを関連する列を基に結合してデータを取得します。`INNER JOIN` (内部結合), `LEFT JOIN` (左外部結合) などがあります。 |
サブクエリ |
|
`SELECT` 文の中に別の `SELECT` 文(サブクエリ)を埋め込んで、複雑な条件を指定します。`WHERE`句、`SELECT`句、`FROM`句などで使用できます。 |
共通テーブル式 (WITH) | (例: ) |
複雑なクエリを分割し、一時的な名前付き結果セット(CTE)を定義して、クエリを読みやすく、構造化します。再帰クエリも可能です。 |
💡 メタコマンド (ドットコマンド)
sqlite3 の対話モードで利用できる、SQL ではない特別なコマンドです。`.` (ドット) で始まります。
コマンド | 説明 | 例 |
---|---|---|
`.help` | 利用可能なメタコマンドの一覧を表示します。 |
|
`.tables` | テーブル一覧を表示します。 |
|
`.schema [テーブル名]` | テーブルやインデックスのスキーマ (CREATE 文) を表示します。引数なしで全スキーマ。 |
|
`.databases` | アタッチされているデータベースファイル一覧を表示します。 |
|
`.quit` / `.exit` | sqlite3 を終了します。 |
|
`.header on|off` | クエリ結果のヘッダー (列名) 表示を切り替えます。 |
|
`.mode モード名` | クエリ結果の出力形式を変更します。モード名: `list` (デフォルト), `column`, `csv`, `html`, `json`, `markdown`, `table` など。 |
|
`.separator 文字列` | `list` モード (デフォルト) や `csv` モードでの区切り文字を指定します。 | (CSVモード用) (TSV用) |
`.output [ファイル名]` | クエリ結果の出力先をファイルに切り替えます。引数なしで標準出力に戻します。 |
|
`.import ファイル名 テーブル名` | ファイルからデータをテーブルにインポートします。ファイル形式は現在の `.mode` と `.separator` に依存します (CSV/TSVが多い)。 |
|
`.dump [テーブル名]` | データベース全体または指定したテーブルの内容を SQL 文 (CREATE TABLE と INSERT) として出力します。バックアップや移行に便利です。 |
|
`.read ファイル名` | ファイルに書かれた SQL 文やメタコマンドを実行します。 |
|
`.timer on|off` | クエリの実行時間を計測・表示するかどうかを切り替えます。 |
|
`.show` | 現在の各種設定値 (モード、ヘッダー、区切り文字など) を表示します。 |
|
`.width 数値 数値 …` | `column` モードでの各列の表示幅を指定します。負の値は右寄せ。 |
|
`.nullvalue 文字列` | NULL 値の表示に使われる文字列を指定します。デフォルトは空文字列。 |
|
`.backup [DB名] ファイル名` | オンラインバックアップを作成します。 |
|
`.restore [DB名] ファイル名` | バックアップファイルからデータベースを復元します。 |
|
`.explain [on|off|auto|query plan]` | `EXPLAIN QUERY PLAN` の出力を制御します。`on` または `query plan` でクエリプランを表示します。 |
|
`.lint options…` | スキーマやクエリの問題点をチェックします (例: `fkey-indexes`)。 |
|
📤📥 インポート/エクスポート
データをファイルから読み込んだり、ファイルへ書き出したりする操作です。メタコマンドを使う方法と、シェルリダイレクトを使う方法があります。
注意: .import
コマンドは指定されたテーブルが存在しない場合、ファイルの1行目をヘッダー行とみなし、それに基づいてテーブルを自動作成しようとします。既存テーブルにインポートする場合は、ファイルの形式(列数、区切り文字)がテーブルスキーマと合っている必要があります。
ファイルからのインポート
目的 | 方法 | 例 |
---|---|---|
CSV ファイルからインポート | メタコマンド .import を使用。事前に .mode csv と必要であれば .separator を設定。 |
またはシェルから:
|
TSV (タブ区切り) ファイルからインポート | メタコマンド .import を使用。事前に .separator "\t" (タブ文字) を設定。.mode list (デフォルト) のままでも良い場合がある。 |
|
SQL ファイルを実行してインポート | メタコマンド .read を使用。SQL ファイルには `CREATE TABLE` や `INSERT INTO` 文が含まれている想定。 |
またはシェルからリダイレクト:
|
ファイルへのエクスポート
目的 | 方法 | 例 |
---|---|---|
CSV ファイルへエクスポート | メタコマンド .mode csv , .separator , .output を使用。 |
またはシェルから:
|
JSON 形式でエクスポート | メタコマンド .mode json と .output を使用。 |
またはシェルから (SQLite 3.33.0+):
|
SQL (ダンプ) 形式でエクスポート | メタコマンド .dump と .output を使用。 |
またはシェルから:
|
テーブル形式 (整形済みテキスト) でエクスポート | メタコマンド .mode table (または column ), .header on , .output を使用。 |
またはシェルから (SQLite 3.37.0+):
|
🔧 設定と情報表示
sqlite3 コマンドラインツールの動作や表示をカスタマイズしたり、データベースに関する詳細情報を表示したりします。
目的 | コマンド/設定 | 説明 |
---|---|---|
現在の設定を表示 |
|
出力モード、ヘッダー表示、区切り文字、NULL値表現など、現在の設定値を一覧表示します。 |
出力モード変更 |
|
出力形式を変更します (`list`, `column`, `csv`, `html`, `json`, `markdown`, `table` など)。 |
ヘッダー表示切替 |
|
SELECT 結果の先頭に列名を表示するかどうかを切り替えます。 |
列幅設定 (`column` モード) |
|
`column` モードでの各列の表示幅を指定します。 |
NULL 値の表示文字設定 |
|
NULL 値をどのように表示するか設定します。 |
実行時間計測 |
|
各 SQL 文の実行時間を表示するかどうかを切り替えます。 |
クエリプラン表示設定 |
|
クエリ実行時にクエリプラン (SQLite がどのようにクエリを実行するか) を表示するか設定します。パフォーマンスチューニングに役立ちます。 |
SQLite バージョン表示 | または シェルで
|
使用している SQLite ライブラリのバージョンを表示します。 |
コンパイルオプション表示 |
|
現在の SQLite ライブラリがどのようなオプション付きでコンパイルされたかを表示します。有効な機能などを確認できます。 |
外部キー制約の有効/無効化 |
|
外部キー制約のチェックを有効または無効にします。デフォルトは OFF の場合が多いです。 |
ジャーナルモード確認/設定 | (例: `DELETE`, `TRUNCATE`, `PERSIST`, `MEMORY`, `WAL`, `OFF`) |
トランザクションの原子性を保証するためのジャーナリング方式を確認・設定します。`WAL` (Write-Ahead Logging) は同時読み書き性能が高いです。 |
キャッシュサイズ設定 (ページ数) | (例: `PRAGMA cache_size = 4000;` 約4MB) |
SQLite がメモリ上に保持するデータベースページの最大数を設定します。負の値でKB単位指定も可能 (例: `-4000` で 4000KB)。パフォーマンスに影響します。 |
同期設定確認/設定 | (レベル: `0`=OFF, `1`=NORMAL, `2`=FULL(デフォルト), `3`=EXTRA) |
ディスクへの書き込み同期レベルを設定します。安全性を取るか速度を取るかのトレードオフがあります。`OFF` は高速ですが、OSクラッシュなどでデータが破損するリスクがあります。`WAL` モードでは通常 `NORMAL` で十分な場合が多いです。 |
✨ 応用的な使い方
トランザクション制御、シェルの拡張機能、特殊なSQL関数など、より高度な使い方です。
目的 | コマンド/構文 (sqlite> プロンプト) | 説明 |
---|---|---|
トランザクション開始 | または
|
一連のデータベース操作をアトミック(不可分)にするトランザクションを開始します。 |
トランザクションのコミット | または
|
トランザクション内の変更を確定し、データベースに永続化します。 |
トランザクションのロールバック |
|
トランザクション内の変更を取り消し、トランザクション開始前の状態に戻します。 |
セーブポイントの設定 | (例: ) |
トランザクション内に中間的なポイントを設定します。部分的なロールバックが可能になります。 |
セーブポイントまでロールバック | (例: ) |
指定したセーブポイント以降の変更を取り消します。 |
セーブポイントの解放 | (例: ) |
指定したセーブポイントを削除します。COMMIT または ROLLBACK でも自動的に削除されます。 |
JSON 関数の利用 (SQLite 3.9.0+) |
|
JSON データの生成、解析、操作を行うための組み込み関数群です。(例: ) |
全文検索 (FTS) の利用 | `CREATE VIRTUAL TABLE … USING fts5(…)` などで FTS 用テーブルを作成し、`MATCH` 演算子で検索。 | 大量のテキストデータに対する高速な全文検索機能 (FTS3/4, FTS5) を利用します。設定や使い方はやや複雑です。 (例: ) |
ウィンドウ関数の利用 (SQLite 3.25.0+) | (例: `ROW_NUMBER`, `RANK`, `DENSE_RANK`, `LAG`, `LEAD`, `SUM`, `AVG` など) |
現在の行に関連する行のセット(ウィンドウ)に対して集計や計算を行います。ランキング、移動平均などに利用できます。(例: ) |
コマンド履歴の利用 | 上下矢印キー | 対話モードで過去に入力したコマンドを呼び出して再利用します。(Readline ライブラリが有効な場合) |
コマンドラインオプション (起動時) |
|
起動時に様々なオプションを指定できます。例: `-init file` (初期化ファイル指定), `-echo` (実行コマンド表示), `-batch` (バッチモード), `-cmd command` (最初に実行するコマンド), `-help` (ヘルプ表示) など。 |
シェルの拡張機能をロード | (Linux/macOS) (Windows) |
C 言語などで作成された共有ライブラリ (拡張機能) を読み込み、カスタム SQL 関数や仮想テーブルなどを追加します。 |
コメント