SQLiteチートシート:ログインからスキーマ確認・DMLまとめ
はじめに
SQLiteはRailsの開発環境でデフォルトのデータベースとして使われます。sqlite3 コマンドを使うとDBに直接ログインしてテーブル構造の確認やデータの操作ができます。
この記事ではログインから、スキーマ・テーブル定義の確認、よく使うSQLまでまとめます。
ログイン
sqlite3 path/to/database.db
Railsプロジェクトでは開発用DBが db/development.sqlite3 にあります。
sqlite3 db/development.sqlite3
接続すると sqlite> プロンプトが表示されます。
SQLite version 3.43.0 Enter ".help" for usage hints. sqlite>
オプション
sqlite3 db/development.sqlite3 "SELECT * FROM users LIMIT 5;" # コマンド実行して終了 sqlite3 -header -column db/development.sqlite3 # ヘッダーと整形表示で起動
メタコマンド(ドットコマンド)
SQLiteのメタコマンドは . から始まります。SQLの終端 ; は不要です。
| コマンド | 説明 |
|---|---|
.help |
コマンド一覧を表示 |
.quit / .exit |
終了 |
.databases |
接続中のデータベースを表示 |
.tables |
テーブル一覧を表示 |
.tables パターン |
名前が一致するテーブルを絞り込む |
.schema |
全テーブルのCREATE文を表示 |
.schema テーブル名 |
指定テーブルのCREATE文を表示 |
.indexes テーブル名 |
インデックス一覧を表示 |
.headers on/off |
ヘッダー行の表示切替 |
.mode column |
カラム整形表示 |
.mode table |
テーブル形式で表示(見やすい) |
.mode csv |
CSV形式で表示 |
.width 自動調整 |
カラム幅を自動調整 |
.output ファイル名 |
出力先をファイルに変更 |
.output stdout |
出力先をターミナルに戻す |
.read ファイル名 |
SQLファイルを読み込んで実行 |
表示を見やすくする
sqlite> .headers on sqlite> .mode table sqlite> SELECT * FROM users LIMIT 3; +----+----------+---------------------------+ | id | name | email | +----+----------+---------------------------+ | 1 | 田中太郎 | tanaka@example.com | | 2 | 鈴木花子 | suzuki@example.com | +----+----------+---------------------------+
スキーマ・テーブル定義の確認
テーブル一覧
sqlite> .tables ar_internal_metadata schema_migrations users
テーブルのCREATE文を確認
sqlite> .schema users CREATE TABLE IF NOT EXISTS "users" ( "id" integer NOT NULL PRIMARY KEY, "name" varchar NOT NULL, "email" varchar NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL );
カラム定義の詳細(PRAGMA)
PRAGMA table_info(users);
cid name type notnull dflt_value pk --- ---------- ----------- ------- ---------- -- 0 id integer 1 1 1 name varchar 1 0 2 email varchar 1 0 3 created_at datetime(6) 1 0 4 updated_at datetime(6) 1 0
cid— カラムインデックスnotnull— NOT NULL制約(1: あり)dflt_value— デフォルト値pk— 主キー(1: あり)
インデックスの確認
PRAGMA index_list(users); PRAGMA index_info(index_users_on_email);
外部キーの確認
PRAGMA foreign_key_list(posts);
基本的なSQL
SELECT
-- 全件取得 SELECT * FROM users; -- カラムを絞る SELECT id, name, email FROM users; -- 条件で絞り込む SELECT * FROM users WHERE name = '田中太郎'; -- 複数条件 SELECT * FROM users WHERE created_at > '2026-01-01' AND name LIKE '田中%'; -- 件数を限定 SELECT * FROM users LIMIT 10; SELECT * FROM users LIMIT 10 OFFSET 20; -- 並び替え SELECT * FROM users ORDER BY created_at DESC; SELECT * FROM users ORDER BY name ASC, created_at DESC; -- 集計 SELECT COUNT(*) FROM users; SELECT COUNT(*) FROM users WHERE name IS NOT NULL;
JOIN
-- INNER JOIN SELECT users.name, posts.title FROM users INNER JOIN posts ON posts.user_id = users.id; -- LEFT JOIN(userがいなくてもpostsを取得) SELECT posts.title, users.name FROM posts LEFT JOIN users ON users.id = posts.user_id;
INSERT
INSERT INTO users (name, email, created_at, updated_at) VALUES ('田中太郎', 'tanaka@example.com', datetime('now'), datetime('now'));
UPDATE
UPDATE users SET name = '田中次郎' WHERE id = 1; UPDATE users SET updated_at = datetime('now') WHERE email LIKE '%@example.com';
DELETE
DELETE FROM users WHERE id = 1; DELETE FROM users WHERE created_at < '2025-01-01'; -- 全件削除(件数を返す) DELETE FROM users;
SQLite特有の機能・注意点
日時関数
SELECT datetime('now'); -- UTC現在時刻 SELECT datetime('now', 'localtime'); -- ローカル時刻 SELECT date('now', '-7 days'); -- 7日前 SELECT strftime('%Y-%m', created_at) FROM users; -- 年月で集計
型の柔軟性
SQLiteは型チェックが緩く、varchar カラムに数値を入れても動きます。これはRailsのマイグレーションで定義した型と実際の格納値が異なる可能性を意味します。
-- varchar カラムでも数値で比較できてしまう(意図しない動作に注意) SELECT * FROM users WHERE id = '1'; -- 動く SELECT * FROM users WHERE id = 1; -- こちらを使う
AUTOINCREMENT と rowid
SQLiteはすべてのテーブルに内部的に rowid を持ちます。INTEGER PRIMARY KEY は rowid の別名になります。
SELECT rowid, * FROM users; SELECT last_insert_rowid(); -- 最後にINSERTしたrowid
ファイルサイズの確認
sqlite> .dbinfo database page size: 4096 number of pages: 5 ...
Railsでよく使うパターン
Railsの開発環境でDBの中身を直接確認したいときに使います。
# Railsコンソール経由が基本だが、直接確認したいとき sqlite3 db/development.sqlite3 # テスト用DBを確認 sqlite3 db/test.sqlite3
sqlite> .headers on sqlite> .mode table sqlite> SELECT * FROM schema_migrations ORDER BY version DESC LIMIT 5;
schema_migrations テーブルにはRailsのマイグレーション実行履歴が記録されています。
まとめ
| 操作 | コマンド |
|---|---|
| ログイン | sqlite3 db/development.sqlite3 |
| テーブル一覧 | .tables |
| テーブル定義 | .schema テーブル名 |
| カラム詳細 | PRAGMA table_info(テーブル名) |
| 表示を整形 | .headers on + .mode table |
| 終了 | .quit |
RailsのDBマイグレーション操作は「Rails のDB操作コマンド入門:db:create から db:rollback まで」を参照してください。
MySQLでの同様の操作は「MySQLチートシート:ログインからスキーマ確認・DMLまとめ」を参照してください。
PostgreSQLでの同様の操作は「PostgreSQLチートシート:ログインからスキーマ確認・DMLまとめ」を参照してください。
Active RecordからSQLがどう発行されるかは「Active Record入門:検索・更新・リレーションの基本まとめ」を参照してください。