Oracle约束

约束定义

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。).

约束功能

约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

约束分类
约束分为6类: 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、条件(CHECK)约束、REF约束。

非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错 

唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。

主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。

外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。

条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

REF约束的定义:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it references.

Oracle Check约束的表达式中必须引用到表中的一个或多个字段,并且表达式的计算结果

必须是一个布尔值

◆可以在表级或字段级定义

◆对同一个字段可以定义多个Oracle Check约束,同时也可以定义NOT NULL约束

1. create table employees 

2. (sal number(7,2) 

3. constraint emp_sal_ck1 check (sal > 0) 

4. ) 

5. alter table employees 

6. add constraint emp_sal_ck2 check (sal < 20000)

删除约束

◆alter table dept drop unique (dname,loc) --指定约束的定义内容

◆alter table dept drop constraint dept_dname_loc_uk --指定约束名

删除约束时,默认将同时删除约束所对应的索引,如果要保留索引,用KEEP INDEX关键字如果

要删除的约束正在被其它约束引用,通过ALTER TABLE..DROP语句中指定CASCADE关键字能够同

时删除引用它的约束利用下面的语句在删除DEPT表中的PRIMARY KEY约束时,同时将删除其它表

中引用这个约束的FOREIGN KEY约束:

alter table dept drop primary key cascade

禁用/激活约束(禁用/激活约束会引起删除和重建索引的操作)

◆alter table employees disable/enable unique email

◆alter table employees disable/enable constraint emp_ename_pk

◆alter tabel employees modify constraint emp_pk disable/enable

◆alter tabel employees modify constraint emp_ename_phone_uk disable/enable

如果有FOREIGN KEY约束正在引用UNIQUE或PRIMARY KEY约束,则无法禁用这些UNIQUE或PRIMARY

KEY约束,这时可以先禁用FOREIGN KEY约束,然后再禁用UNIQUE或PRIMARY KEY约束;或者可以

在ALTER TABLE...DISABLE语句中指定CASCADE关键字,这样将在禁用UNIQUE或PRIMARY KEY约束

的同时禁用那些引用它们的FOREIGN KEY约束,如:

alter table employees disable primary key cascade

约束数据字典

◆all_constraints/dba_constraints/user_constraints 约束的基本信息,包括约束的名称,

类型,状态(约束类型:C(Oracle Check约束),P(主码约束),R(外部码约束),U(唯一码约束))

◆all_cons_columns/dba/user 约束对应的字段信息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值