職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

SqliteのCHECK 制約

2020年06月10日 | sqlite
SqliteのCHECK 制約

【開発環境】
OS:Win10(64ビット)
データベース:SQLite3
コマンドプロンプト入力

【CHECK制約とは】
カラムに CHECK 制約を設定すると、データを追加する時に値が指定した条件を満たしているかどうかのチェックが出来る。

書式
CREATE TABLE テーブル名(カラム名 CHECK(条件式), ...);

実行
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\shyok>cd D:\pg\sqlite3

C:\Users\shyok>d:

D:\pg\sqlite3>sqlite3 D:\pg\sqlite3\myfriend.sqlite3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
Tuser numtest1 personal product staff user
sqlite> drop table user;
sqlite>
sqlite> create table user(id integer, name text, old integer check(old > 18));
sqlite>
sqlite> insert into user values(1, 'Suzuki', 19);
sqlite> insert into user values(4, 'Kudou', 21);
sqlite> .heade on
sqlite> .mode column
sqlite>
sqlite> select * from user;
id name old
---------- ---------- ----------
1 Suzuki 19
4 Kudou 21
sqlite>
次に old カラムが条件に一致しないデータを追加してみます
sqlite> insert into user values(7, 'Takahashi', 16);
Error: CHECK constraint failed: user

【AND/ORを使ったより複雑な条件式を設定する】
CHECK 制約で記述する条件式では AND や OR を使用してより複雑な条件式を記述することができる。
sqlite> create table user(name text, old integer, gender text, check(gender = 'woman' or old > 20));
sqlite> insert into user values('Takahashi', 16, 'woman');
sqlite> insert into user values('Itou', 31, 'man');
sqlite> insert into user values('Suzuki', 24, 'woman');
sqlite>
sqlite> select * from user;
name old gender
---------- ---------- ----------
Takahashi 16 woman
Itou 31 man
Suzuki 24 woman
sqlite> insert into user values('Yamada', 15, 'man');
Error: CHECK constraint failed: user
sqlite>


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする