Top > SQLite > カラムの制約


カラムの制約

空欄の禁止 (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
  • UNIQUE は、1 つのテーブル内で複数カラムに指定可能
  • PRIMARY KEY は、1 つのカラムにのみ指定可能
  • NULL 入力した場合は、自動的に値が入力される
    sqlite> INSERT INTO menu_primary (id,name) VALUES(null,"イチゴミルク");
    sqlite> SELECT * FROM menu_primary;
    id    name
    ----  --------------
    1     イチゴパフェ
    2     イチゴミルク


オートインクリメント (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 を指定した場合、
    レコードを削除して追加すると、削除した番号を飛ばして次の番号が入力される

リロード   凍結解除 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Fri, 13 May 2011 00:25:10 JST (2204d)