SQLite 3 のフィールド型
テーブル作成時 (CREATE TABLE
) に指定したフィールド定義に含まれているテキストにより、以下のようにフィールド型が決定されます。
- INTEGER 型:
INT
という文字列を含む場合。 - TEXT 型:
CHAR
、CLOB
、TEXT
を含む場合。 - NONE 型:
BLOB
を含む型、あるいはデータ型が特定されない場合。 - NUMERIC 型: それ以外の場合。
テーブルが存在しない場合だけテーブルを作成する (IF NOT EXISTS)
CREATE TABLE IF NOT EXISTS tbl(id INTEGER PRIMARY KEY, name TEXT, bin BLOB);
逆に、テーブルが存在する場合だけテーブルを削除するということもできます。
この場合は、IF NOT EXISTS
の代わりに、IF EXISTS
を使用します。
DROP TABLE IF EXISTS tbl;
NULL の追加を禁止する (NOT NULL)
フィールドの定義時に、NOT NULL
というフィールド制約を加えておくと、データ追加時にそのフィールドの値を省略できないようになります。
CREATE TABLE tbl(f1 NOT NULL, f2, f3);
sqlite> INSERT INTO tbl(f1, f2) VALUES(100, 200);
sqlite> INSERT INTO tbl(f2, f3) VALUES(200, 300);
SQL error: tbl.f1 may not be NULL
同じ値の入力を禁止する (UNIQUE)
フィールドの定義時に、UNIQUE
というフィールド制約を加えることで、別のレコードに入っている値と同じ値を追加できないようになります。
CREATE TABLE tbl(name UNIQUE);
sqlite> INSERT INTO tbl(name) VALUES('Jack');
sqlite> INSERT INTO tbl(name) VALUES('Jack');
SQL error: column name is not unique
自動的に連番を振る (INTEGER PRIMARY KEY)
フィールドの定義で、INTEGER PRIMARY KEY
を指定しておくと、データ追加時にそのフィールドの値を指定しなかった場合に、自動的に連番を振ってくれます。
CREATE TABLE tbl(id INTEGER PRIMARY KEY);
sqlite> INSERT INTO tbl(id) VALUES(NULL);
sqlite> INSERT INTO tbl(id) VALUES(NULL);
sqlite> INSERT INTO tbl(id) VALUES(NULL);
sqlite> SELECT * FROM tbl;
1
2
3
自動的に日付・時刻を格納する (DEFAULT CURRENT_TIMESTAMP)
フィールドの定義に日時関連の DEFAULT
制約を設定しておくと、データの追加時にそのフィールドに何も指定しない場合に現在の日時をセットしてくれます。
- DEFAULT CURRENT_DATE: 現在の日付 (2010-08-21)
- DEFAULT CURRENT_TIME: 現在の時刻 (14:30:56)
- DEFAULT CURRENT_TIMESTAMP: 現在の日時 (2010-08-21 14:30:56)
上記の日時は、UTC で格納されるので、実際にこの値を取得してローカルタイムで表示する場合は、時差などを考慮して時刻を表示する必要があります。
CREATE TABLE tbl(
id INTEGER PRIMARY KEY,
date DEFAULT CURRENT_TIMESTAMP
);
sqlite> INSERT INTO tbl(id) VALUES(1);
sqlite> INSERT INTO tbl(id) VALUES(2);
sqlite> INSERT INTO tbl(id) VALUES(3);
sqlite> SELECT * FROM tbl;
1||2010-07-31 19:15:27
2||2010-07-31 19:15:40
3||2010-07-31 19:15:44