rktSQLite

rktSQLite2




構造・定義の作成

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);