SQLiteでも他のDBと同じく、CREATE TABLE 文を使用してテーブルを作成します。
目次
テーブルの作成方法
1. 通常のCREATE TABLE 文
構文
CREATE TABLE テーブル名
例
以下では商品(product)テーブルを定義しています。
1 2 3 4 |
CREATE TABLE product ( id INTEGER PRIMARY KEY, name TEXT ); |
2. 既に存在するテーブルの場合は作成しない
次のように、IF NOT EXISTS オプション を指定することで存在しない場合のみ、テーブル作成を行うこともできます。
1 2 3 4 |
CREATE TABLE IF NOT EXISTS product ( id INTEGER PRIMARY KEY, name TEXT ); |
3. 外部キー制約をつける
上記で作成した商品(product)テーブルを参照する、注文履歴(order_history)テーブルを作成します。
注文履歴テーブルは、商品テーブルの id を参照します。
書式:FOREIGN KEY(参照元の列名) REFERENCES 参照先テーブル(参照先列名)
1 2 3 4 5 6 7 |
CREATE TABLE order_history ( order_id INTEGER, product_id INTEGER, order_num INTEER, PRIMARY KEY(order_id,product_id) FOREIGN KEY(product_id) REFERENCES product(id) ); |
ただし、注意点としてSQLiteでは外部キー制約はデフォルトで OFF になっています。
そのため、せっかく外部キー制約を定義しても制約違反になるデータを登録することができます。
そのため、次のコマンドを実行することで、外部キー制約を有効化することができます。
1 |
PRAGMA foreign_keys = ON; |
列(カラム)の型について
SQLiteには、5つの型があります。
TEXT | 文字列を格納 |
---|---|
NUMERIC | INTEGERもしくはREALの値を格納 |
INTEGER | 整数値を格納 |
REAL | 浮動小数点表現の値を格納(整数値でも強制的に浮動小数点表現にする) |
BLOB | バイナリ値を格納 |
ただし、SQLiteでは列の型は、”推奨値” として扱われるため、REAL型の列に文字列を登録することもできます。(エラーにならない)
そのため、アプリケーション側の不具合で、意図しない値を登録してしまう可能性があるため注意が必要です。
列の型の検証については、こちら(列の型について) に記載しています。