複合テーブル属性としてCHECKを指定する場合、制約に名前を付けるかどうかに応じて構文は異なります。
- テーブル レベルのCHECK制約は、少なくともそのテーブルの1列を参照する必要があります。
- 指定したテーブルに対して、最大100のテーブル レベルの制約を定義できます。
テーブル属性のCHECK制約は、そのテーブルに定義されている列について、列相互に比較したり、定数と比較したりできます。
CHECK (boolean_condition)
CHECK制約は、列属性またはテーブル属性として指定できます。
サブクエリー、集約関数または順序付き分析関数をCHECK制約に含めることはできません。
CHECK制約は、識別列または揮発テーブルの列に対して指定できません。
- BLOB
- CLOB
- UDT
- ARRAY/VARRAY
- Period
- XML
- Geospatial
- JSON
- DATASET
Vantageは、文字列に対するCHECK制約を、現行セッション照合を使用して検査します。この結果、両方に対して同じデータが挿入または更新されたとしても、CHECK制約があるセッション照合に一致するものの、別の照合に一致しない場合があります。
同じブール条件と大文字/小文字を使用した、名前の付いていないCHECK制約は重複とみなされ、これを指定するとシステムはエラーを返します。
例えば、次のCREATE TABLEリクエストは、f1とF1の大文字小文字が異なるため、有効です。
CREATE TABLE t1 ( f1 INTEGER, CHECK (f1 > 0), CHECK (F1 > 0));
次のCREATE TABLEリクエストは、両方のf1の指定が小文字で同じであるため、無効です。
CREATE TABLE t1 ( f1 INTEGER, CHECK (f1 > 0), CHECK (f1 > 0));
列属性およびテーブル属性のCHECK制約の場合は、任意の単純なブール演算検索条件を指定できます。CHECK制約の定義には、subquery、集約式、または順序付き分析式を含めることができません。
- 揮発テーブルの列
- 識別列
CHECK制約の検索条件は、SET演算子を指定できません。
Vantageでは、テーブル属性CHECK制約に対して次の非ANSI SQL制約構文をサポートしています。
BETWEEN value_1 AND value_2
システムは、次のANSI準拠の制約であるように構文を処理します。
CHECK (column_name BETWEEN value_1 AND value_2)
揮発テーブル列、識別列、UDT列、ARRAY、VARRAY、Geospatial列、Period列、BLOB列、またはCLOB列を除き、BETWEEN … AND演算子もCHECK制約の形式として使用できます。
ドメインを構成するためのCHECK制約の使用について詳しくは、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
正規化テーブルの場合、Vantageは入力行または新規行についてCHECK制約を検証します。
行レベル セキュリティ テーブルの行レベル セキュリティ制約列に対して、CHECK制約を定義することはできません。
行レベル セキュリティ テーブルに1つまたは複数のCHECK制約を定義した場合、その制約の実施により、そのテーブルに定義されたUDFセキュリティ ポリシーが実行されることはありません。CHECK制約の実施はテーブル全体に適用されます。したがって、CHECK制約は、ユーザーが表示できる行だけでなく、テーブル内のすべての行に適用されます。
- CONSTRAINT constraint_name
- 列に挿入できる、または列で更新できる値を制約するために使用される、名前付き単純ブール条件式を指定します(任意指定)。名前付きのCHECK列制約には、この構文を使用します。