17.10 - CHECK (boolean_ condition) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)
Last Update
2021-09-23

名前なしのCHECK列制約を指定します。column_nameは、boolean_conditionの左側になります。

次のルールは列属性のCHECK制約のみに適用されます。
  • 列属性のCHECK制約は、そのテーブルの別の列や他のテーブルの列を参照できません。
  • 複数のCHECK制約を1つの列に指定することができます。複数の名前なし列レベルCHECK制約は、単一の列レベルCHECK制約に組み合わせられます。複数の名前付き列レベルのCHECK制約は個別に適用されます。

非テンポラル テーブルとテンポラル テーブルに対して、列レベルのCHECK制約を指定できます。テンポラル テーブルでCHECK制約をサポートする方法の詳細は、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。

CHECK制約は、列属性またはテーブル属性として指定できます。

副問合わせ、集約関数、または順序付き分析関数をCHECK制約に指定することはできません。

CHECK制約の検索条件は、SET演算子を指定できません。

CHECK制約は、識別列または揮発テーブルの列に対して指定できません。

CHECK制約を追加または変更すると、Vantageによってそのテーブルのすべての既存の行がスキャンされて、現在の値が、指定された検索条件を満たしているかどうかが評価されます。条件を満たしていない場合、システムは要求元にエラーを返し、 テーブル定義には変更を加えません。

CHECK制約は、テンポラル テーブルと非テンポラル テーブルに対して有効です。テンポラル テーブルでCHECK制約をサポートする方法の詳細は、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。

この句は、ANSI SQL:2011規格に対するTeradataの拡張機能です。

ビューに使用するテーブルに対して、テーブル レベル制約、列レベル制約、およびFOREIGN KEY WITH CHECK OPTION制約を組み合わせると、INSERTリクエストおよびUPDATEリクエストで解析できないほど巨大な制約式が作成される可能性があります。

文字(char)列に対するCHECK制約では、現行のセッション照合が使用されます。あるセッション照合を満たしたCHECK制約は、同じデータが挿入または更新された場合でも別のセッション照合では満たされないことがあります。

次のいずれかのデータ型で定義されている列に対してはCHECK制約を指定できません。
  • BLOB
  • CLOB
  • ARRAY/VARRAY
  • Period
  • UDT
  • XML
  • Geospatial
  • JSON
  • DATASET

BLOB列またはCLOB列を参照するCHECK制約を追加することはできません。

同一のブール条件で複数の名前なしCHECK制約を指定することはできません。ただし、次のALTER TABLEリクエストは、f1とF1の大文字小文字が異なるため有効になります。

    ALTER TABLE t1 (
      ADD f1 INTEGER, CHECK (f1 > 0), CHECK (F1 > 0));

次のリクエストは両方のf1の指定が同じであるため無効になります。

    ALTER TABLE t1 (
      ADD f1 INTEGER, CHECK (f1 > 0), CHECK (f1 > 0));

また、揮発テーブル列、識別列、UDT列、ARRAY、VARRAY、Geospatial列、Period列、BLOB列、またはCLOB列を除き、BETWEEN ... AND演算子もCHECK制約の形式として使用できます。

CHECK制約の条件は、任意の単純なブール検索条件になることもあります。Subquery、集約式、および順序付き分析式は、CHECK制約定義の検索条件において有効ではありません。

CHECK制約は、次の列には指定できません。
  • 揮発テーブルの列
  • 識別列

テーブル属性CHECK制約には、次の非ANSI SQL制約構文を使用できます。

    BETWEEN value_1 AND value_2

システムはこの制約を、次のANSI準拠の制約であるかのように処理します。

    CHECK (column_name 
 BETWEEN  value_1 
 AND  value_2)

ドメインを構成するためのCHECK制約の使用について詳しくは、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

CONSTRAINT constraint_name
列に挿入できる、または列で更新できる値を制限するための名前付きブール条件式。