12のOracleの制約シリーズ

表レベルの制約は必須です
次の5つの制約:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • 外部キー
  • チェック

注意事項

  • あなたは制約名を指定しない場合は、Oracleサーバーは自動的にフォーマットSYS_Cnに従って制約名を割り当て
  • 制約の作成と変更します。
  1. テーブルの同じ時間の建設で
  2. テーブルの構築後
  • 制約は、テーブルレベルまたは列レベルで定義することができます
  • 制約は、データ・ディクショナリ・ビューを介して見ることができます

テーブル・レベルおよび列レベルの制約の
範囲:
    ①カラムレベルの制約は、1つの列のみに影響を与えることができる
    ②テーブルレベルの制約(もちろん、テーブル・レベルの制約がカラムに作用することができる)複数列に作用し得る
方法定義:列制約を以下に定義列に従わなければならない、テーブル制約を持つ列はしませんが、個別に定義されました。
非空(nullでない)制約は、上の列に定義することができ
た制約の定義

CREATE  TABLE  [ スキーマを。] データ型[ DEFAULT式expr ] 
        [ column_constraint ] 
        ...
        [ table_constraint ] [ 、... ])。
CREATE  TABLEの従業員を(
           EMPLOYEE_ID   NUMBER6 )、
             FIRST_NAME    VARCHAR220 )、
           ...
           JOB_ID        VARCHAR210NOT  NULL CONSTRAINT emp_emp_id_pk
                        PRIMARY  KEY(EMPLOYEE_ID))。

制約の定義

  • 列レベル
カラム [ CONSTRAINT CONSTRAINT_NAME ] CONSTRAINT_TYPE、
  • 表レベル
コラム、...
   [ CONSTRAINT CONSTRAINT_NAME ] CONSTRAINT_TYPE、...)、

NOT NULL制約

  • 列の値が空にすることはできませんようにするには:
  • あなただけの、列レベルで定義することができます。


UNIQUE制約

  • 複数のヌル値を許可する唯一の制約:NULL。
  • あなたは、テーブルレベルまたは列レベルで定義することがあります。


PRIMARY KEY制約は、

テーブルレベルまたは列レベルで定義することができます。

CREATE  TABLEの   部署を(
    DEPARTMENT_ID         NUMBER4 )、
    DEPARTMENT_NAME       VARCHAR230 CONSTRAINT dept_name_nn NOT  NULL 
    MANAGER_ID            NUMBER6 )、
    location_idの           NUMBER4 )、
       CONSTRAINT dept_id_pk PRIMARY  KEY(DEPARTMENT_ID))。

FOREIGN KEY制約は、


テーブルレベルまたは列レベルで定義することができます。

CREATE  TABLEの従業員を(
    EMPLOYEE_ID       NUMBER6 )、
    LAST_NAME         VARCHAR225NOT  NULL 
    電子メール             VARCHAR225 )、
    給与            NUMBER82 )、
    COMMISSION_PCT    NUMBER22 )、
    入社年月日DATE NOT  NULL 
  ...
    DEPARTMENT_ID     NUMBER4 )、
     CONSTRAINT EMP_DEPT_FK FOREIGN  KEY (DEPARTMENT_ID)
       REFERENCESの部門(DEPARTMENT_ID)、
     CONSTRAINT emp_email_uk UNIQUE(電子メール));

FOREIGN KEY制約のキーワード

  • FOREIGN KEY:表の列は、テーブルレベルで指定されています
  • REFERENCES:親表の列に示されています
  • DELETE CASCADE ON(カスケード削除):親テーブルの列を削除すると、削除された列に対応する子テーブルでもあります
  • DELETE SETのNULL(ブランクカスケード)ON:サブテーブル対応する列ブ

CHECK制約

  • 各行は、の定義の条件を満たさなければなりません


制約を追加する

ALTER TABLE文:

  • 追加または制約を削除しても、制約を変更することはできません
  • 制約の有効化または無効化
  • MODIFY文を使用するためにNOT NULL制約を追加します。
ALTER  TABLEの     テーブル
  ADD  [ CONSTRAINT制約]タイプ()。
従業員から選択*としてemp表を作成するには、例えば、制約の追加と削除
アルターテーブルは、(EMPNAMEのVARCHAR2(50)NOT NULL)に変更し、EMP。


ALTER  TABLEの従業員は、
     ADD  CONSTRAINT emp_manager_fk FOREIGN  KEY (MANAGER_ID)
         REFERENCESの従業員(EMPLOYEE_ID)を、

制約を削除します

  • EMPLOYEES表から制約を削除
ALTER  TABLEの従業員DROP  CONSTRAINTの emp_manager_fk。

無効化の制約

  • ALTER TABLE文で無効な制約にDISABLE句を使用してください。
ALTER  TABLEの従業員DISABLE CONSTRAINTの emp_emp_id_pk。

アクティベーションの制約

  • ENABLE句は、現在、無効な制約を起動することができます
  • あなたが定義またはアクティブUNIQUEまたはPRIMARY KEY制約は自動的にUNIQUEまたはPRIMARY KEYインデックスが作成されます
ALTER  TABLEの        従業員
ENABLE CONSTRAINTの     emp_emp_id_pkを。

クエリの制約

  • クエリデータディクショナリビューUSER_CONSTRAINTS
SELECT
    CONSTRAINT_NAME、
    CONSTRAINT_TYPE、
    SEARCH_CONDITION
から
    USER_CONSTRAINTS

    table_nameは=  従業員

 

  • クエリデータディクショナリビューUSER_CONS_COLUMNS
SELECT
    CONSTRAINT_NAME、
    COLUMN_NAME
から
    USER_CONS_COLUMNS

    table_nameは=  従業員

おすすめ

転載: www.cnblogs.com/loaderman/p/11738934.html