SQLiteのこと
基本はデータベース毎に1ファイル作成して管理する。
データ型
テーブル作成時に型の定義は必須でない。
どんな型かは区別されている。
NULL
INTEGER
TEXT
REAL
BLOB
テーブル作成時に指定できる型
NONE
INTEGER
TEXT
REAL
NUMERIC
データベースの作成・接続
sqlite3 データベース名
一致するデータベース名があれば接続される。
一致するデータベース名がなければ新規作成され、接続される。
「データベース名」がそのままファイル名として作成される。
接続されるとプロンプト(コマンドを入力する場所)がsqlite>
となる。
sqlite3.exeファイルのあるディレクトリ以外にデータベースファイルを作成したい場合
sqlite3 パス名¥データベース名
テーブル作成
create table テーブル名(カラム名, カラム名);
型を指定する時
create table テーブル名(カラム名 型, カラム名 型);
テーブル名変更
alter table テーブル名 rename to 新テーブル名;
テーブル削除
drop table テーブル名;
データの追加
①insert into user values(データ, データ);
②insert into テーブル名(カラム名, カラム名, カラム名) values(データ名 データ名, データ名);
DEFAULT制約をつけているカラムをDEFALUTの値で登録させたい時は①の方法ではカラム数不足でエラーが出る。②で登録したいカラムのみ設定するとできる。
存在しているテーブルの確認
接続している状態で.tables
プライマリーキーの設定
create table テーブル名(カラム名 型 primary key, カラム名 型);
integer型にプライマリーキーの設定
create table テーブル名(カラム名 integer primary key, カラム名 型);
新データ追加時、存在している最大値+1の数を自動で付与してくれる。
insert into user(name) values('あああ');
→idが自動で付与される
autoincrementの設定
create table テーブル名(カラム名 型 primary key autoincrement, カラム名 型);
これをつけると、一度使われた値は割り当てられなくなり、今まで付与された最大値+1の値がカラムに設定される。
primary keyだけだと削除したデータがあれば新データはその値がもう一度割り当てられちゃう。
ROWIDの表示
select *, rowid from テーブル名;
ROWIDとは、データ追加時に自動で付与される非表示のid。
integer型のプライマリーキーを設定すると御暗示値を取る
カラムの追加
alter table テーブル名 add column 新カラム名 型;
型は指定してもしなくてもよい。
NOT NULL制約
create table テーブル名(カラム名 型 not null, カラム名 型);
対象のカラムにはnullが入れられなくなる。
UNIQUE制約
create table user(id integer unique, name text);
対象のカラムには同じ値が入れられなくなる。
nullは重複可
複数カラムの組み合わせにUNIQUE制約
create table テーブル名(カラム名 型, カラム名 型, カラム名 型, unique(カラム名1, カラム名2));
カラム名1とカラム名2の値は重複可能。
組み合わせの重複が不可。
DEFAULT制約
create table product(カラム名 型 default デフォルト値);
何もいれずに登録した時にDEFAULTで設定した値が反映される。
null、文字列、数値、が設定できる。
日付のデフォルト値設定
create table product(カラム名 default CURRENT_TIME);
追加した時点の日時を登録できる。
①CURRENT_TIME 「HH:MM:SS」
②CURRENT_DATE 「YYYY-MM-DD」
③CURRENT_TIMESTAMP「YYYY-MM-DD HH:MM:SS」
CHECK制約
create table テーブル名(カラム名 型, カラム名 型 check(条件式));
create table テーブル名(カラム名1, カラム名2, ... , check(条件式));
カラム追加時に条件に一致しているか判定してくれる。
ANDやORを使って条件式を複雑にもできる
例)年齢が1歳より大きく10歳未満
create table user(id integer, old integer check(old > 1 and old < 10));
終了
.exit
Viewの作成
SELECT分の条件に合う中身を引き抜いて仮想のテーブルを作成できる。
create view ビュー名 as SELECT文;
例)create view ppriceview as select name, price from product where price > 100;
Viewの中身確認
select * from 作成したビュー名;
View一覧の確認
Viewのみを一覧する機能はない。
.tables
でテーブルと共にViewも一覧表示される。
Viewが作られた時のSQL文確認
select name, sql from sqlite_master where type = 'view';
Viewの削除
drop view ビュー名
設定されているコマンドを確認
データベースに接続されている状態で.show
テーブルを選択
select * from テーブル名;
指定したテーブルの中身が確認できる。
コメントを残す
-- コメント
/* コメント */
文字列のエスケープ処理
「'」を前に入れる
insert into テーブル名 value('I''m a human.');
テーブルがどのように作成されたか確認
スキーマ情報が確認できる。
.mode line
を使うと表示が見やすくなる。
①select * from sqlite_master;
②.schema
特定のテーブルを指定
①select * from sqlite_master where type='table' and name='テーブル名';
②.schema テーブル名
コマンドが長い時
SQL文が長くなると、何を書いているか分からなくなってくる。
SQL文は;
が付くまで1つの文として扱われるので
長ければEnterキーを押して改行できる。
ちょっと見やすくなる。
参考記事
DBOnline SQLite入門
https://www.dbonline.jp/sqlite/