SQLiteのテーブル作成
SQLite(エスキューライト)にテーブルを作成する方法は、他のRDBと同様でSQLのCREATE TABLE文で行います。ただし、SQLiteではカラムにデータ型を定義することなくテーブルを作成することができます。
「TEMPORARY」を指定して作成したテンポラリテーブルは、データベースファイルへの接続が終了した時点で削除されます。
CREATE [TEMP | TEMPORARY] TABLE テーブル名 ( カラム定義 [, カラム定義]* [, 制約条件]* ) CREATE [TEMP | TEMPORARY] TABLE テーブル名 AS SELECT文 ・カラム定義 名前 [データ型] [[CONSTRAINT 名前] カラム制約条件]* ・データ型 型名 | 型名 ( 数字 ) | 型名 ( 数字 , 数字 ) ・カラム制約条件 NOT NULL [ CONFLICT 句 ] | PRIMARY KEY [ソート順] [ CONFLICT 句 ] | UNIQUE [ CONFLICT 句 ] | CHECK ( 評価式 ) [ CONFLICT 句 ] | DEFAULT 値 ・制約条件 PRIMARY KEY ( 名前 [, 名前]* ) [ CONFLICT 句 ]| UNIQUE ( 名前 [, 名前]* ) [ CONFLICT 句 ] | CHECK ( 評価式 ) [ CONFLICT 句 ] ・CONFLICT 句 ON CONFLICT 衝突時アルゴリズム
CREATE TABLE文の例
DROP TABLE TBL1; CREATE TABLE TBL1( ID TEXT(4) NOT NULL, PATTERN TEXT(2) NOT NULL, KOUBAN TEXT(3) NOT NULL, NAIYO TEXT(40), HYOUJIJUN INTEGER(3) NOT NULL DEFAULT 0, CANCELFLAG TEXT(1) DEFAULT '0', PRIMARY KEY(ID, PATTERN,KOUBAN) );
データ型
NULL | NULL値 |
INTEGER | 符号付き整数。桁数によって1, 2, 3, 4, 6 バイトで保存される |
REAL | 浮動小数点数。8バイトで保存される |
TEXT | 文字列。データベースのエンコーディング(UTF-8, UTF-16BE もしくは UTF-16LE)で保存される |
BLOB | バイナリデータ(Binary Large OBject)。入力データがそのまま保存される |
Boolean型はありませんが、Booleanを指定した場合、INTEGER 型の 0(false), 1(true)として保存されます。
Date 型, Time 型, DateTime 型はありませんが、指定した場合、かわりに組み込みのDate And Time Functionsが INTEGER, TEXT, REAL のいずれかとして保存されます。
- INTEGER:1970-01-01 00:00:00 UTC からの秒数である Unix Time
- TEXT:ISO8601 表記の文字列("YYYY-MM-DD HH:MM:SS.SSS")
- REAL:先発グレゴリオ暦にしたがった紀元前4714年11月24日、グリニッジ標準時における正午からのユリウス日数
Affinity候補型
SQLiteのデータ型は、動的型付けシステムが使用されます。 SQLiteには他のRDBMSとの互換性のためにType Affinity(型の類似性)機能があり、各種データベース製品のデータ型はSQLiteでは、一端、Affinity候補型のいずれかに割り当てられます。
- TEXT
- NUMERIC
- INTEGER
- REAL
- NONE
Affinity候補型のいずれかに割り当てられたデータ型は、設定される値に応じて最終的に最適と判断されるSQLiteのデータ型(NULL, INTEGER, REAL, TEXT, BLOB)に変換されます。
カラム制約
PRIMARY KEY | 主キーを設定する |
NOT NULL | カラムのNULL許可しない |
UNIQUE | カラムの値がテーブル内で重複を許可しない |
CHECK | カラムの値を式により評価する |
DEFAULT | カラムのデフォルト値を指定する |
不要領域の削除
テーブルを削除した後や大量のデータを削除した後などに発生する不要な領域を解放するにはSQLiteのコマンドラインツール上で次のようにVACUUMコマンドを入力します。VACUUMコマンドを実行することでデータベースファイルのサイズを縮小することができます。
sqlite> VACUUM;