SQLite3構文 表制約(primary key, unique, check, foreign key)
列制約でなく表制約。
成果物
列制約との違い
制約 | 違い |
---|---|
primary key |
複数の列を指定できる |
unique |
複数の列を指定できる |
check |
複数の列を参照できる |
foreign key |
複数の列を指定できる |
細かいところは列制約と同じはず。
名前をつけることができる
constraint 制約名 制約句
ただしconstraint 制約名
は省略できる。名付けず定義できる。
名前を付けてもSQLite3では意味がない。drop constraint
できるならまだしも、できないから。
primary key
pk.sql
create table T( A integer, B integer, constraint pk primary key(A,B) );
unique
unique.sql
create table T( A integer, B integer, constraint u unique(A,B) );
check
check.sql
create table T( A integer, B integer, constraint c check(A = 1 and B = 1) ); insert into T values(0,1); insert into T values(1,0); insert into T values(1,1); select * from T;
Error: near line 6: CHECK constraint failed: c Error: near line 7: CHECK constraint failed: c 1|1
foreign key
fk.sql
pragma foreign_keys = ON; create table P( A integer, B integer, constraint pk primary key(A,B) ); create table C( A integer, B integer, constraint fk foreign key(A,B) references P(A,B) ); insert into C(0,0); -- 外部制約エラー(親ない) insert into P(0,0); insert into C(0,0); .echo on select * from C; select * from P;
Error: near line 12: FOREIGN KEY constraint failed select * from P; 0|0 select * from C; 0|0
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)