oracle約束總結(not null/unique/primary key/foreign key/check)

來源:互聯網
上載者:User

標籤:oracle   約束   constraint   

約束(constraint):對建立的表的列屬性、欄位進行的限制。諸如:not null/unique/primary key/foreign key/check

作用範圍:
        ①資料行層級條件約束只能作用在一個列上
        ②表級約束可以作用在多個列上(當然表級約束也可以作用在一個列上)
定義方式:列約束必須跟在列的定義後面,資料表條件約束不與列一起,而是單獨定義。


— —NOT NULL:不為空白約束,只能定義在列級

CREATE TABLE employees(    employee_id    NUMBER(6),    --<span style="color:#FF0000;">系統命名</span>    last_name      VARCHAR2(25) <span style="color:#FF0000;">NOT NULL</span>,    salary         NUMBER(8,2),    commission_pct NUMBER(2,2),    --<span style="color:#FF0000;">使用者自訂命名</span>    hire_date      DATE  <span style="color:#FF0000;">CONSTRAINT emp_hire_date_nn NOT NULL</span>,
      可以在PL/SQLDEV的My objects-Tables-employees-Check constraints中查看該表的約束。


— —UNIQUE:唯一約束,可以定義在表級或列級

CREATE TABLE employees(    employee_id      NUMBER(6),    --<span style="color:#FF0000;">列級,系統命名唯一約束</span>    last_name        VARCHAR2(25) <span style="color:#FF0000;">UNIQUE</span>,    email            VARCHAR2(25),    salary           NUMBER(8,2),    commission_pct   NUMBER(2,2),    hire_date        DATE NOT NULL,...      --<span style="color:#FF0000;">表級,使用者自訂命名唯一約束</span>    CONSTRAINT <span style="color:#FF0000;">emp_email_uk</span> UNIQUE(email));


— —PRIMARY KEY :主鍵,可以定義在表級或列級

    CREATE TABLE   departments(          department_id        NUMBER(4),          department_name      VARCHAR2(30)  CONSTRAINT dept_name_nn NOT NULL,          manager_id           NUMBER(6),          location_id          NUMBER(4),          CONSTRAINT dept_id_pk <span style="color:#FF0000;">PRIMARY KEY</span>(department_id));



— —FOREIGN KEY: 外鍵,在表級指定子表中的列

— —REFERENCES: 標示在父表中的列

— —ON DELETE CASCADE(串聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除

— —ON DELETE SET NULL(級聯置空): 子表中相應的列置空

     constraint emp1_dept_id_fk <span style="color:#FF0000;">foreign key</span>(dept_id) <span style="color:#FF0000;">references</span> departments(department_id) <span style="color:#FF0000;">ON DELETE CASCADE</span>


— —CHECK :定義每一行必須滿足的條件

..., salaryNUMBER(2)     CONSTRAINT emp_salary_min              CHECK (salary > 0),...



1.如何定義約束---在建立表的同時,添加對應屬性的約束
   1.1 表級約束 & 資料行層級條件約束
   
create table emp1(        employee_id number(8),        salary number(8),        --<span style="color:#FF0000;">資料行層級條件約束</span>        hire_date date not null,        dept_id number(8),        email varchar2(8) constraint emp1_email_uk unique,        name varchar2(8) constaint emp1_name_uu not null,        first_name varchar2(8),        --<span style="color:#FF0000;">表級約束</span>        constraint emp1_emp_id_pk primary key(employee_id),        constraint emp1_fir_name_uk unique(first_name),        --<span style="color:#FF0000;">外鍵約束</span>        constraint emp1_dept_id_fk foreign key(dept_id) <span style="color:#FF0000;">references</span> departments(department_id) ON DELETE CASCADE    )


  1.2 只有not null 只能使用資料行層級條件約束。其他的約束兩種方式皆可

2.添加和刪除表的約束--在建立表以後,只能添加和刪除,不能修改
    2.1添加
    alter table emp1    add constaint emp1_sal_ck check(salary > 0)

    2.1.1對於not null來講,不用add,需要使用modify:
   
    alter table emp1    modify (salary not null)

    2.2 刪除
    alter table emp1    drop constaint emp1_sal_ck

    2.3使某一個約束失效:此約束還存在於表中,只是不起作用
    alter table emp1
    disable constraint emp1_email_uk;

    2.4使某一個約束啟用:啟用以後,此約束具有約束力
    alter table emp1    enable constraint emp1_email_uk;


    

oracle約束總結(not null/unique/primary key/foreign key/check)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.