SQLiteのType Affinityの仕様やサポートされている関数の詳細については、以下の公式ドキュメントをご参照ください。
SQLite Mode
SQLiteモードで
独自の方言を体験しよう
Miria SQL Learningの裏側でも動いている、世界で最も使われている軽量データベースの仕様を体験できます。
INTEGER PRIMARY KEYと自動採番、Type Affinityによる柔軟な型の扱いなど、SQLiteならではの特徴を確認します。
01
こんな特徴に挑戦できます
サーバーを必要とせずファイルとして動作するSQLiteは、型の扱いや自動採番の仕組みが他のRDBMSと少し異なります。
INTEGER PRIMARY KEY で自動採番
SQLiteでは、カラムを INTEGER PRIMARY KEY に設定するだけで、内部的なRowIDと紐づき自動的に連番が振られるようになります。
CREATE TABLE items (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
SQLiteには AUTOINCREMENT キーワードも存在しますが、IDの再利用を防ぐ厳密な用途以外では、単に INTEGER PRIMARY KEY を指定する書き方が推奨されています。
型の制約がとても「ゆるい」
PostgreSQLやMySQLが厳格なデータ型を持つのに対し、SQLiteは「Type Affinity(型の親和性)」という柔軟な仕組みを採用しています。
CREATE TABLE users (
id INTEGER,
name VARCHAR(10)
);
-- SQLiteでは、VARCHAR(10)のカラムに10文字以上の文字列や数値を入れても
-- エラーにならず、そのまま保存されてしまいます。
INSERT INTO users (id, name) VALUES (1, 'とても長い名前のユーザーです');
この「ゆるさ」はSQLite特有のものです。Miria SQL LearningでPostgreSQLモードやMySQLモードに切り替えて同じINSERTを実行すると、アプリのバリデーションが働き、文字数オーバーの制約エラーがしっかり発生するのを体験できます。
日付や時刻の専用データ型が存在しない
PostgreSQLやMySQLには DATE や DATETIME(TIMESTAMP)といった日付・時刻専用のデータ型が用意されていますが、SQLiteには日付専用のデータ型が存在しません。
そのため、日付データを保存する際は以下のいずれかの型を代用します。
- TEXT型: 'YYYY-MM-DD HH:MM:SS' のような文字列(ISO8601形式)として保存する(最も一般的)
- INTEGER型: UNIXタイムスタンプ(1970年からの秒数)として保存する
- REAL型: ユリウス日(紀元前4714年からの日数)として保存する
-- TEXT型で保存した日付文字列を、SQLiteの組み込み関数で計算する例
SELECT date('2024-01-01', '+1 month');
-- 結果: '2024-02-01'
SQLiteのテスト環境でうまく動いていた日付の計算処理が、本番のPostgreSQL環境では型エラーになってしまうというのは、Web開発における「あるある」のバグです。
Comparison
他のRDBMSと比べると?
| やりたいこと | SQLite | PostgreSQL | MySQL |
|---|---|---|---|
| 自動採番 | INTEGER PRIMARY KEY |
SERIAL |
AUTO_INCREMENT |
| 型の厳密さ | 動的 (Type Affinity) | 非常に厳格 | 厳格 |
| 文字列結合 | a || b |
a || b |
CONCAT(a, b) |
| 日付・時刻型 | 専用型なし(TEXT等で代用) | DATE / TIMESTAMP |
DATE / DATETIME |
Learning Point
SQLiteの「ゆるさ」を知っておく。
スマホアプリのローカルDBや、手軽なテスト環境としてSQLiteは世界中で使われています。しかし、型のゆるさ(Type Affinity)を知らないまま開発を進めると、本番環境のPostgreSQLに移行した途端にエラーが多発することがあります。
アプリ内でモードを切り替えて、「SQLiteなら通るけど、他では通らない」という違いを今のうちに体感しておきましょう。
Try SQLite
読んだら、次は
SQLを動かして
みよう!
Miria SQL Learningの基盤でもあるSQLiteの挙動を、ブラウザ上で実際に確認してみてください。
Next Guide
他のRDBMSも比較してみる
DATABASE GUIDE
PostgreSQLモード
型の厳格なPostgreSQLでの違いを確認します。
PostgreSQLを見るDATABASE GUIDE
MySQLモード
Web系でシェアの高いMySQLの書き方を確認します。
MySQLを見るCOMPARISON
PostgreSQL vs MySQL
代表的な2つのRDBMSの違いを並べて比較します。
比較ページへ