ORACLE提供了如下几种约束:NOT NULL 非空、UNIQUE 唯一、PRIMARY KEY 主键、FOREIGN KEY 外键、CHECK 条件检查。 一、not null约束 1、建立表时指定约束。 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)); 属于列级约束。
SQL> create table aa3(id number(10), 2 name varchar2(20), 3 company varchar2(20), 4 constraint aa3_id_c check(id>=1) 5 ); 注:约束中,非空约束必须是列约束。其他类型的约束都即可以是列约束,也可以创建为表约束。 三、unique约束 1、列级约束 SQL> create table aa3(id number(10) constraint aa3_id_u unique, 2 name varchar2(20), 3 company varchar2(20)); 2、表级约束 SQL> create table aa3(id number(10), 2 name varchar2(20), 3 company varchar2(20), 4 constraint aa3_id_u unique(id) 5 ); 四、主键约束 主键约束在效果上,相当于唯一约束+非空约束。也就是,即要求列值不能重复,又要求列值必须非空。要注意的是,在同一列上,不能即有主键约束,又有唯一约束。 五、外键约束 外键约束则必须主键结合在一起使用。在创建约束时,先必须先有一个主键,然后,根据此主键,创建一个相关联的外键约束。也就是说,外键约束必须对应一个主键,不能创建独立的外键约束。
创建表 create table emp1(id number(10), name varchar2(20), dept number(10)); create table dept1(dept number(10), dept_name varchar2(20));
设置主外键约束 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)); 六、级联删除 delete from dept1 where dept=3;不能删除数据,违背了主外键约束。 将子表外键设为级联删除,这样删除主表部门3的数据时,子表有关部门3的数据也就跟着删除了。 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不允许删除父表。除非使用级联约束cascade constraints将先删除子表上的外键,再删除父表。 drop table dept1 cascade constraints; 七、约束的禁用与启用 1、约束的禁用 Alter table 表名 disable constraint 约束名 cascade; 在主外键约束中,先禁用外键,再禁用主键。 2、约束的启用 Alter table 表名 enable constraint 约束名 cascade; 在主外键约束中,先启用主键,再启用外键 |
|
来自: 哈飞扬 > 《数据库知识(网文)》