|
カラムの制約
空欄の禁止 (NULL, NOT NULL)
- カラムに必ずデータが入力されるように設定できる
- デフォルトでは、NULL(空欄)が許可されるようになっている
- 空欄を禁止しているカラムに空欄でレコードを追加しようとするとエラーとなる
- 例
- NULL を許可しないテーブルを作成する (NOT NULL で定義する)
sqlite> CREATE TABLE menu_not_null (id INTEGER, name VARCHAR(16) NOT NULL);
- 作成したテーブルに name カラムを空欄にしてレコードを作成する
sqlite> INSERT INTO menu_not_null (id) VALUES(1);
Error: menu_not_null.name may not be NULL
- Note
- NULL が格納されているカラムに「NULL」の文字を表示させる
sqlite> .nullvalue NULL
初期値 (DEFAULT)
- レコードが作成されたとき、決まった値が自動的に入力されるカラムを作成できる
- 初期値を入れるカラム名の後に「DEFAULT 初期値」と記述
- 例
- テーブルを作成
sqlite> CREATE TABLE menu_default (id INTEGER, name VARCHAR(16) DEFAULT "初期値");
- レコードの追加
sqlite> INSERT INTO menu_default (id) VALUES(1);
sqlite> SELECT * FROM menu_default;
id name
---- --------------
1 初期値
重複を禁止 (UNIQUE)
- 同一カラムに同じ値の入力を禁止する
- カラム名とデータ型の後に「UNIQUE」を付けるだけ
- 禁止しているカラムに同じ値を追加しようとすると、エラーとなる
- 例
- テーブルの作成
sqlite> CREATE TABLE menu_unique (id INTEGER, name VARCHAR(16) UNIQUE);
- レコードの追加
sqlite> INSERT INTO menu_unique (id,name) VALUES(1,"イチゴパフェ");
sqlite> INSERT INTO menu_unique (id,name) VALUES(2,"イチゴパフェ");
SQL error: column name is not unique
プライマリキー (PRIMARY KEY)
- レコードを特定する為に使用するカラムに設定する
- 絶対に重複がないカラムに対して設定する
- sqlite 内では、そのレコードに対してインデックスが作成され、検索等を高速化する
- プライマリキーは、1 つのテーブルに対して 1 つだけ設定できる
- 例
- テーブルを作成する
sqlite> CREATE TABLE menu_primary (id INTEGER PRIMARY KEY, name VARCHAR(16));
- レコードの追加
sqlite> INSERT INTO menu_primary (id,name) VALUES(1,"イチゴパフェ");
sqlite> INSERT INTO menu_primary (id,name) VALUES(1,"イチゴパフェ");
SQL error: PRIMARY KEY must be unique
- Note
オートインクリメント (AUTOINCREMENT)
- AUTOINCREMENT は、整数値型かつ PRIMARY KEY のカラムに指定可能
- 整数値方は INT ではなく、INTEGER と指定する必要がある
- 例
- テーブルの作成
sqlite> CREATE TABLE menu_auto (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(16));
- レコードの追加
sqlite> INSERT INTO menu_auto (name) VALUES("イチゴパフェ");
sqlite> INSERT INTO menu_auto (name) VALUES("イチゴミルク");
sqlite> INSERT INTO menu_auto (name) VALUES("イチゴプリン");
sqlite> SELECT * FROM menu_auto;
id name
---- --------------
1 イチゴパフェ
2 イチゴミルク
3 イチゴプリン
- Note
- PRIMARY KEY で指定した場合も、自動で順番に番号が振られるが、AUTOINCREMENT を指定した場合、
レコードを削除して追加すると、削除した番号を飛ばして次の番号が入力される
|
|