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)
);

データ型

NULLNULL値
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;

inserted by FC2 system