|
構造・定義の作成
CREATE TABLE |
新しいテーブルの作成
CREATE [TEMP | TEMPORARY] TABLE テーブル名 (
カラム定義 [, カラム定義]*
[, 制約条件]*
)
CREATE [TEMP | TEMPORARY] TABLE テーブル名 AS SELECT文
・カラム定義
名前 [データ型] [[CONSTRAINT 名前] カラム制約条件]*
・データ型
型名 |
型名 ( 数字 ) |
型名 ( 数字 , 数字 )
・カラム制約条件
NOT NULL [ CONFLICT 句 ] |
PRIMARY KEY [ソート順] [ CONFLICT 句 ] |
UNIQUE [ CONFLICT 句 ] |
CHECK ( 評価式 ) [ CONFLICT 句 ] |
DEFAULT 値
・制約条件
PRIMARY KEY ( 名前 [, 名前]* ) [ CONFLICT 句 ]|
UNIQUE ( 名前 [, 名前]* ) [ CONFLICT 句 ] |
CHECK ( 評価式 ) [ CONFLICT 句 ]
・CONFLICT 句
ON CONFLICT 衝突時アルゴリズム
・テーブル名にsqlite_で始まる名前をつけることはできません。
・SQLiteは型がありません。
・カラム制約
PRIMARY KEY 主キーを設定します。
NOT NULL カラムのNULL許可しません。
UNIQUE カラムの値がテーブル内で重複しないようにします。
CHECK カラムの値を式により評価します。
DEFAULT カラムのデフォルト値を指定します。
|
サンプル |
ユーザーのアカウント管理用のテーブルを作成します。
emailが重複して登録されないようにします。
パスワードが4文字以上入力される様にチェックします。
CREATE TABLE account_tbl (
id integer NOT NULL,
flag integer DEFAULT 1,
name varchar(64) NOT NULL,
email varchar(128) UNIQUE,
password varchar(32),
CONSTRAINT account_pky PRIMARY KEY (id),
CONSTRAINT password_chk CHECK (length(password) >= 5)
);
|
CREATE VIEW |
新しいビューの作成
CREATE [TEMP | TEMPORARY] VIEW ビュー名 AS SELECT文
|
サンプル |
マスターテーブルからビュー情報だけを表示するビューの作成。
CREATE VIEW master_view AS
SELECT * FROM sqlite_master WHERE type='view';
|
CREATE TRIGGER |
新しいトリガーの作成
CREATE [TEMP | TEMPORARY] TRIGGER トリガ名 [ BEFORE | AFTER ]
データベースイベント ON [データベース名 .] テーブル名
トリガーアクション
CREATE [TEMP | TEMPORARY] TRIGGER トリガ名 INSTEAD OF
データベースイベント ON [データベース名 .] ビュー名
トリガーアクション
・データベースイベント
DELETE |
INSERT |
UPDATE |
UPDATE OF カラムの並び
・トリガーアクション
[ FOR EACH ROW | FOR EACH STATEMENT ] [ WHEN 評価式 ]
BEGIN
トリガーステップ ; [ トリガーステップ ; ]*
END
・トリガーステップ
UPDATE文 | INSERT文 |
DELETE文 | SELECT文
・NEW,OLD疑似リレーション
NEW 変更・挿入後の値を参照できます。
OLD 変更・削除前の値を参照できます。
|
サンプル |
掲示板で親のメッセージを削除した際にそれに対して返信された
メッセージも削除する作業をトリガーを用いて行います。
掲示板テーブルの作成。
CREATE TABLE bbs_tbl (
id integer NOT NULL,
title varchar(128),
body text,
parent integer,
PRIMARY KEY (id)
);
親のメッセージを削除した後それにぶら下る返信
メッセージを削除するトリガーの作成。
CREATE TRIGGER del_parentbbs AFTER
DELETE ON bbs_tbl
BEGIN
DELETE FROM bbs_tbl WHERE parent = old.id;
END;
|
CREATE INDEX |
新しいインデックスの作成
CREATE [ TEMP | TEMPORARY] [ UNIQUE] INDEX インデックス名
ON [ データベース名 .] テーブル名 ( カラム名 [ , カラム名 ] * )
[ ON CONFLICT 衝突時アルゴリズム ]
・カラム名
名前 [ ASC | DESC ]
|
サンプル |
CREATE TABLEでのサンプルにあるアカウントテーブルの
emailに対してインデックスを作成します。
CREATE INDEX email_idx ON account_tbl (email);
|
|