- はじめに
- CHECK 制約とは
- 試してみた
- 実装状況
- 思った事
--
--
--
--
CHECK 制約 (-せいやく、英: Check Constraint)とは、データベースにおいてデータを追加、更新する際の有効なデータを定義する規則のことをいう。
https://ja.wikipedia.org/wiki/CHECK%E5%88%B6%E7%B4%84
--
- SQL92 で既定されている
- SQL92 = 1992 年 11 月が初版
- 詳細
--
CREATE TABLE products (
product_no INT,
name TEXT,
price NUMERIC CHECK (price > 0)
);
https://www.postgresql.jp/document/9.4/html/ddl-constraints.html
--
CREATE TABLE Persons (
ID INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Age INT,
City VARCHAR(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
--
CREATE TABLE users (
age INT CHECK(
age >= 18
AND age < 100
),
name VARCHAR(10) CHECK(
name ~ '^a'
)
);
INSERT INTO users VALUES(17, 'a');
INSERT INTO users VALUES(18, 'b');
INSERT INTO users VALUES(18, 'a');
--
--
少なくても 7.3.21 では実装済み(2008 年 1 月 7 日)
https://www.postgresql.org/docs/7.3/ddl-constraints.html
--
8.0.16 で対応(2019 年 4 月 25 日) https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-16.html#mysqld-8-0-16-sql-syntax
--
- Oracle
- SQL Server
- DB2
--
- 主要 Database は対応している
- MySQL が一番遅かった様子
--
- 少しでも RDB 触るのであれば知らないのはやばい
- どこまで定義するのか難しい
- ガチガチに設定は少し違うお気持ち
- やりすぎると緩和緩和と変更対応大変そう
- 結局は最後の網として使用?
- 概要
- SQL92
--
- RDB ドキュメント
- PostgreSQL
- MySQL
- Oracle
- SQL Server
- DB2