Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » データ整合性の確保 » テーブル制約とカラム制約の使い方

 

カラムに対する検査制約の使い方

カラムの値がある基準を満たすようにするため、検査条件を使用します。これらの条件は、データが正しいかどうかを確認するためのものであったり、企業のポリシーや内部規定などが反映される厳密なものであったりします。個々のカラムに対する検査条件は、カラム内の値を一定の範囲に収める必要がある場合に便利です。

検査条件が使用されると、その後はローの修正前に値が条件に対して評価されます。検査制約が設定された値を更新すると、その値の制約が検査されるだけでなく、残りのローの制約も検査されます。

ドメインに検査制約を付加することもできます。ドメインのカラム検査制約の継承を参照してください。

注意

カラムの検査は、FALSE が返された場合にエラーになります。UNKNOWN が返されても、動作は TRUE が返される場合と同じで、その値が受け入れられます。

有効な条件の詳細については、探索条件を参照してください。

例 1

データのフォーマットを規定します。たとえば、テーブルに電話番号のカラムがあるとして、その電話番号カラムが同じフォーマットで入力されるようにします。北米地域の電話番号に対する制約の例を次に示します。

ALTER TABLE Customers
ALTER Phone
CHECK ( Phone LIKE '(___) ___-____' );

この検査条件が使用されると、たとえば Phone の値を 9835 に設定しようとしても、変更されません。

例 2

エントリに入力されるデータが、あらかじめ決められたいくつかの値のいずれかになるように設定できます。たとえば、City カラムに、その会社の事業所の所在地など、いくつかの許可された都市のいずれかしか入力できないようにするには、次のように制約を使用します。

ALTER TABLE Customers
ALTER City
CHECK ( City IN ( 'city_1', 'city_2', 'city_3' ) );

データベースの作成時に特に指定をしなかった場合、文字列の比較において大文字と小文字は区別されません。

例 3

日付や数値が一定の範囲内に収まるように設定できます。次に、制約を使って従業員の入社日 StartDate を会社の創立から現在までの日付にする文の例を示します。

ALTER TABLE Employees
ALTER StartDate
CHECK ( StartDate BETWEEN '1983/06/27'
                   AND CURRENT DATE );

日付のフォーマットはいくつか用意されています。ここで使用した YYYY/MM/DD のフォーマットは、現在のオプション設定に関係なく必ず認識される特長があります。