CHECK制約

広告

カラムに格納する値に条件に一致しているかどうかの判定を行いたい場合、カラムにCHECK制約を設定します。ここではCHECK制約の使い方について解説します。

1.CHECK成約の使い方
2.AND/ORを使ったより複雑な条件式

CHECK成約をカラムに設定する場合、書式は次の通りです。

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

条件式にはカラムに格納する値の条件を記述します。例えば格納できる値をは0以上の値に制限する、といった条件式を指定できます。

また複数のカラムを組み合わせた条件式を設定したい場合の書式として次のような書式も利用できます。(詳しくは後で解説します)。

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

では実際に試してみます。次のようなテーブルを作成しました。「old」カラムにはCHECK成約が設定されており、正の値しか格納できません。

create table user(id integer, name text, old integer check(old > 0));

p13-1

いくつかのデータを追加した後に条件式に合わないデータを追加してみます。すると「old」カラムのCHECK制約で設定した条件に合わないため「Error: CHECK constraint failed: user」というエラーが表示されます。

p13-2

このようにCHECK制約を使用することでカラムに格納できる値を制限することが可能です。

CHECK制約で記述する条件式ではANDやORを使用してより複雑な条件式を記述することができます。例えば「old」カラムの値を18より大きく30未満に制限する場合は次のように記述できます。

create table user(id integer, name text, 
  old integer check(old > 18 and old < 30));

「gender」カラムの値を「man」か「woman」に限定する場合は次のように記述できます。

create table user(id integer, name text, 
  gender text check(gender = 'man' or gender = 'woman'));

また複数のカラムを使った条件式を記述する場合は、2番目の書式を使って次のように記述することができます。下記では性別が女性か、または年齢が20より大きい場合にデータを追加できます。

create table user(name text, old integer, gender text,
  check(gender = 'woman' or old > 20));

では実際に試してみます。最後に記載したテーブルを実際に作成しました。

p13-3

データを追加してみます。性別が女性か年齢が20より大きい場合は正常に追加できます。

p13-4

次にCHECK制約の条件式に合わないデータを追加してみます。すると「Error: CHECK constraint failed: user」というエラーが表示されます。

p13-5

このようにANDやORを使用することで、より複雑な条件式をCHECK制約で設定することが可能になります。

( Written by Tatsuo Ikura )