4.

SQLite

編集

本稿はSQLiteに関する記事です。

SQLiteとは?

SQLiteデータベース管理システム(DBMS)のひとつです。

SQLiteはサーバーとして機能するのではなく、アプリケーションに組み込まれて使用されます。

データの保存も単一のファイルのみを使用します。

SQLiteの主な特徴

  • サーバー不要 — 1ファイル+ライブラリだけで動作。インストール・管理が極めて軽い
  • パブリックドメイン — ライセンス制約なし。商用利用も自由
  • クロスプラットフォーム — Windows / Mac / Linux / iOS / Android すべてに対応
  • 標準SQL対応 — SELECT / JOIN / TRANSACTION 等のSQL機能を備える
  • 軽量・高速 — 小規模データに最適。読み取り中心なら非常に高速
  • 埋め込み型 — iOS/Android標準DB、各種アプリ・ブラウザ内部でも使用

SQLiteが向く・向かない用途

向いている向いていない
モバイルアプリ・組み込み大規模Webサービス(同時書き込み多数)
個人用・小規模ツールクライアント・サーバー分離が必要なシステム
キャッシュ・設定保存高同時書き込み・大量同時アクセス
テスト用DBレプリケーション・分散DB
静的サイト+単一DB業務基幹系の大規模OLTP

SQLiteの活用例

  • iOS / Android アプリ — ローカルデータ保存(標準採用)
  • Webブラウザ — Chrome、Firefox、Safari の履歴・Cookie
  • Skype、Adobe系 — 設定・ユーザーデータ
  • Laravel、Django等 — テスト環境の既定DB
  • 組み込み機器 — IoTデバイス、家電

基本のSQLite操作

CLIで開く

$ sqlite3 mydb.sqlite    # ファイル指定。なければ新規作成
sqlite> .tables          # テーブル一覧
sqlite> .schema users   # テーブル定義
sqlite> .quit           # 終了

テーブル作成・データ操作

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (name) VALUES ('Taro');
SELECT * FROM users;
UPDATE users SET name = 'Jiro' WHERE id = 1;
DELETE FROM users WHERE id = 1;

SQLite特有のポイント

  • 型の柔軟さ(型親和性): TEXT列に数値を入れても許される。厳密型ではない
  • PRIMARY KEY自動採番: INTEGER PRIMARY KEY がROWIDのエイリアスとして自動採番される
  • 同時書き込みは1つだけ: ファイル単位の書き込みロック
  • WAL モード: PRAGMA journal_mode = WAL; で同時読み取りの性能向上
  • 外部キー制約はデフォルト無効: PRAGMA foreign_keys = ON; で有効化

各言語からの利用

言語ライブラリ
Python標準ライブラリ sqlite3
PHPPDO(sqlite:/path/to/db.sqlite
Javasqlite-jdbc
Node.jsbetter-sqlite3sqlite3
C/C++SQLite公式ライブラリ

注意点

  • 本番Webアプリで多人数アクセスには不向き。MySQL / PostgreSQLを検討
  • ファイル破損: 不適切な停止電源等で破損することがある。バックアップ必須
  • 暗号化: 標準では非対応。SQLCipherなどで対応
  • カラム削除はSQLite 3.35以前ではサポートなし(テーブル再作成が必要だった)

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Oracle
  2. MySQL & MariaDB
  3. DB2
  4. SQLite
  5. PostgreSQL
  6. RDBMS共通