まくろぐ

SQLite のテーブル作成に関するメモ

更新:
作成:

SQLite 3 のフィールド型

テーブル作成時 (CREATE TABLE) に指定したフィールド定義に含まれているテキストにより、以下のようにフィールド型が決定されます。

  • INTEGER 型: INT という文字列を含む場合。
  • TEXT 型: CHARCLOBTEXT を含む場合。
  • 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
まくろぐ
サイトマップまくへのメッセージ