ORACLE提供了如下幾種約束:NOT NULL 非空、UNIQUE 唯一、PRIMARY KEY 主鍵、FOREIGN KEY 外鍵、CHECK 條件檢查。 一、not null約束 1、建立表時(shí)指定約束。 SQL> create table aa3(id number(10) constraint aa3_nn not null, 2 name varchar2(20), 3 company varchar2(20)); 2、表建立好后再指定約束。 SQL> drop table aa3; SQL> create table aa3( 2 id number(10), 3 name varchar2(20), 4 company varchar2(20)); SQL> alter table aa3 modify(id constraint aa3_nn not null); 3、刪除約束。 SQL> alter table aa3 drop constraint aa3_nn; 二、check條件檢查 SQL> create table aa3(id number(10) constraint aa3_id_c check(id>=1), 2 name varchar2(20), 3 company varchar2(20)); 屬于列級(jí)約束。
SQL> create table aa3(id number(10), 2 name varchar2(20), 3 company varchar2(20), 4 constraint aa3_id_c check(id>=1) 5 ); 注:約束中,非空約束必須是列約束。其他類型的約束都即可以是列約束,也可以創(chuàng)建為表約束。 三、unique約束 1、列級(jí)約束 SQL> create table aa3(id number(10) constraint aa3_id_u unique, 2 name varchar2(20), 3 company varchar2(20)); 2、表級(jí)約束 SQL> create table aa3(id number(10), 2 name varchar2(20), 3 company varchar2(20), 4 constraint aa3_id_u unique(id) 5 ); 四、主鍵約束 主鍵約束在效果上,相當(dāng)于唯一約束+非空約束。也就是,即要求列值不能重復(fù),又要求列值必須非空。要注意的是,在同一列上,不能即有主鍵約束,又有唯一約束。 五、外鍵約束 外鍵約束則必須主鍵結(jié)合在一起使用。在創(chuàng)建約束時(shí),先必須先有一個(gè)主鍵,然后,根據(jù)此主鍵,創(chuàng)建一個(gè)相關(guān)聯(lián)的外鍵約束。也就是說(shuō),外鍵約束必須對(duì)應(yīng)一個(gè)主鍵,不能創(chuàng)建獨(dú)立的外鍵約束。
創(chuàng)建表 create table emp1(id number(10), name varchar2(20), dept number(10)); create table dept1(dept number(10), dept_name varchar2(20));
設(shè)置主外鍵約束 alter table dept1 add(constraint dept1_dept_p primary key(dept)); alter table emp1 add(constraint emp1_dept_f foreign key(dept) references dept1(dept)); 六、級(jí)聯(lián)刪除 delete from dept1 where dept=3;不能刪除數(shù)據(jù),違背了主外鍵約束。 將子表外鍵設(shè)為級(jí)聯(lián)刪除,這樣刪除主表部門3的數(shù)據(jù)時(shí),子表有關(guān)部門3的數(shù)據(jù)也就跟著刪除了。 alter table emp1 drop constraint emp1_dept_f; SQL> alter table emp1 add(constraint emp1_dept_f 2 foreign key(dep t) 3 references dept1(dept) 4 on delete cascade); ORACLE不允許刪除父表。除非使用級(jí)聯(lián)約束cascade constraints將先刪除子表上的外鍵,再刪除父表。 drop table dept1 cascade constraints; 七、約束的禁用與啟用 1、約束的禁用 Alter table 表名 disable constraint 約束名 cascade; 在主外鍵約束中,先禁用外鍵,再禁用主鍵。 2、約束的啟用 Alter table 表名 enable constraint 約束名 cascade; 在主外鍵約束中,先啟用主鍵,再啟用外鍵 |
|