SQLのCREATE TABLE文を使えば、データベースにテーブルを作成することができます。
テーブルを作成する際には、テーブルに作成する列を定義します。
列の定義では、列の名前と列のデータ型を指定することで、列を作成することができます。
列の名前と列のデータ型を指定した単純な列では、データ型に応じた値であれば、どのような値でも登録することができます。
例えば、数値のデータ型であるint型を指定した列では、-2,147,483,648 ~ 2,147,483,647の値が登録できます。
しかし、場合によっては、指定した範囲の値しか登録させたくない場合もあります。
SQLには、ある列の値に特定の値のみ格納できるように制限する仕組み(列に格納される値が妥当であるかどうかを検証する仕組み)が用意されています。
今回は、特定の列の値を制限するために使用するCHECK制約について紹介したいと思います。
テーブルを作成する基本的なCREATE TABLE文の書き方については、以下の記事を参考にしてください。
CHECK制約を設定するサンプルテーブル
本記事では、CHECK制約を設定するテーブルとして、以下のテーブルを使用します。
入金テーブル
テーブル定義
入金テーブルのテーブル定義は以下のようになります。
列名 | データ型 |
---|---|
入金番号 | int |
入金日 | date |
名義人 | varchar(50) |
入金額 | int |
SQL文
入金テーブルの基本的なCREATE TABLE文は以下のようになります。
1 2 3 4 5 6 7 |
CREATE TABLE 入金 ( 入金番号 int, 入金日 date, 名義人 varchar(50), 入金額 int ); |
CHECK制約の指定
特定の列にCHECK制約を指定するには、列の定義(列の名前と列のデータ型)の後にスペース文字列を入れて、その後にCHECK(制約の条件式)を記述します。
CHECK制約では、制約の条件として指定した式を満たす場合(trueとなる場合)の値のみ指定が許可されます。
例えば、入金テーブルの入金額に0よりも大きいの値を指定させる制約を指定する場合は、以下のようになります。
1 |
入金額 int CHECK(入金額 > 0) |
CHECK制約で指定する値には、固定値(リテラル値)の他に、キーワードや関数等も指定できます。
ここでは入金額に1~999999までの範囲のみを格納できるようにします。
CHECK制約の定義は次のようになります。
1 |
入金額 int CHECK(入金額 >= 1 AND 入金額 <= 999999) |
上記の例では「>=」演算子と「<=」演算子を使って記述しましたが、同様のことをBETEEEN演算子を使って記述した例も示しておきます。
1 |
入金額 int CHECK(入金額 BETWEEN 1 AND 999999) |
1 |
入金日 date CHECK(入金日 <= GETDATE()) |
1 2 3 4 5 6 7 |
CREATE TABLE 入金 ( 入金番号 int, 入金日 date CHECK(入金日 <= GETDATE()), 名義人 varchar(50), 入金額 int CHECK(入金額 > 0) ); |