条件式。
成果物
check
制約
- 指定した式が偽なら制約違反でエラー
- 参照できる列は自分の列のみ(表制約なら全列参照できる)
check(expr)
0.sql
create table T(A text check(A = 'A')); insert into T values('a'); insert into T values('A'); select * from T;
Error: near line 2: CHECK constraint failed: T A
A列の値がA
ならば許可する。それ以外はcheck
制約違反。
違反後は強制終了されず、引き続き処理できるらしい。
比較演算子
=
,==
!=
,<>
>
,>=
<
,<=
is
,is not
=
, ==
1_0_0.sql
create table T(A integer check(A = 0)); insert into T values(1); insert into T values(0); select * from T;
Error: near line 2: CHECK constraint failed: T
0
!=
, <>
1_1_0.sql
create table T(A integer check(A != 0)); insert into T values(1); insert into T values(0); select * from T;
Error: near line 3: CHECK constraint failed: T
1
1_1_1.sql
create table T(A integer check(A <> 0)); insert into T values(1); insert into T values(0); select * from T;
Error: near line 3: CHECK constraint failed: T
1
>
,>=
1_2_0.sql
create table T(A integer check(A > 0)); insert into T values(1); insert into T values(0); select * from T;
Error: near line 3: CHECK constraint failed: T
1
1_2_1.sql
create table T(A integer check(A >= 0)); insert into T values(-1); insert into T values(0); select * from T;
Error: near line 2: CHECK constraint failed: T
0
<
,<=
1_3_0.sql
create table T(A integer check(A < 0)); insert into T values(-1); insert into T values(0); select * from T;
Error: near line 3: CHECK constraint failed: T
-1
1_3_1.sql
create table T(A integer check(A <= 0)); insert into T values(1); insert into T values(0); select * from T;
Error: near line 2: CHECK constraint failed: T
0
is
, is not
1_4_0.sql
create table T(A integer check(A is NULL), B text); insert into T values(-1, 'A'); insert into T values(NULL, 'B'); select * from T;
Error: near line 2: CHECK constraint failed: T |B
1_4_1.sql
create table T(A integer check(A is not NULL), B text); insert into T values(-1, 'A'); insert into T values(NULL, 'B'); select * from T;
Error: near line 3: CHECK constraint failed: T
-1|A
論理演算子
and
or
and
2_0.sql
create table T(A integer check(0 < A and A < 100)); insert into T values(100); insert into T values(1); select * from T;
Error: near line 2: CHECK constraint failed: T
1
or
2_1.sql
create table T(A integer check(A = 0 or A = 1)); insert into T values(100); insert into T values(1); select * from T;
Error: near line 2: CHECK constraint failed: T
1
like
3_0.sql
create table T(A text check (A not like '%ABC%')); insert into T values('1ABC2'); insert into T values('1AAA2'); select * from T;
Error: near line 2: CHECK constraint failed: T 1AAA2
glob
3_1.sql
create table T(A text check (A not glob '*ABC*')); insert into T values('1ABC2'); insert into T values('1AAA2'); select * from T;
Error: near line 2: CHECK constraint failed: T 1AAA2
regexp
3_2.sql
create table T(A text check (A not regexp '\d{4}-\d{2}-\d{2}')); insert into T values('200-001-001'); insert into T values('2000-01-01'); select * from T;
Error: near line 3: CHECK constraint failed: T 200-001-001
between
3_3.sql
create table T(A integer check(A not between 0 and 3)); insert into T values(4); insert into T values(3); select * from T;
Error: near line 3: CHECK constraint failed: T
4
in
3_4.sql
create table T(A integer check(A not in (2, 4, 6))); insert into T values(2); insert into T values(3); select * from T;
Error: near line 2: CHECK constraint failed: T
3
exists
3_5.sql
create table T(A integer check(not exists (select 1 where A = 1))); insert into T values(2); insert into T values(1); select * from T;
Error: near line 1: subqueries prohibited in CHECK constraints
check
制約内でサブクエリは禁止されている。
窓関数
窓関数を未学習のため未確認。
対象環境
- 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)