分享

Oracle中的约束

 哈飞扬 2015-10-16

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;

         在主外键约束中,先启用主键,再启用外键

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多