SQLite note5 DDL
テーブル一覧を確認
.tables
外部ファイル読み込み
(ログイン状態から実行)
.read external_command_file01.sql
(ログインしない状態から実行)
sqlite3 myapp01.db < external_command_file01.sql
※powershellでは「<」が予約語となっているため、実行できない。
スキーマ確認
.schema [テーブル名]
テーブル作成
無ければ作成(以下の例は、「posts」というテーブル名)
CREATE table if not exists posts(
id integer primary key
,title text
,body text default 'no name'
,size realINTEGER
,image blb
,other
);
- real:小数を扱える
- INTEGER:符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納
- TEXT:テキスト。UTF-8, UTF-16BE or UTF-16-LEのいずれかで格納
- BLOG:Binary Large OBject。入力データをそのまま格納
- NULL:NULL値
テーブル名変更
alter table table01 rename to table02;
カラム追加
alter table table01 add column added_column01 text;
テーブル作成
create table table01 ( id, column01, column02 );
create table table02 (
id integer primary key
,column_int integer
,column_text text
,column_real real
,column_blb blb
,column_null
-- ,created_at datetime (datetime('now', '+09:00:00')) --日付型は無いが、こう書ける?
);
view
create view viewname1 as
select
name
,score
from
users
where 1=1
and name is not null
order by
score desc
limit 5
;
削除
drop view if exists viewname1;
trigger
-- CREATE table if not exists messages (message);
create trigger new_winner update of score on users when new.score > 100
begin
insert into messages (message) values (
'name:' || new.name ||
' ' || old.score ||
'->' || new.score
);
end;
削除
drop trigger <trigger_name>
index
create index score_index on users(score);
create unique index name_index on users(name); --重複を許可しない
検索は早くなるが、更新・挿入は遅くなる
確認
.indices [<テーブル名>]
.schema [<テーブル名>]
.drop indes if exists <定義名>