oracle系统一共提供了以下5种与约束:
1、非空(not null)约束:所定义的列不能为空。
2、唯一(unique)约束:在表中每一行中所定义的这个列或这些列的值不能为空。
3、主键(primary key)约束:指定一列或几列的组合为该表的主键,主键唯一标识表中的一行(当然oracle数据库中的表中隐含一个rowid的列,它也唯一标识表中一行),并且主键不能为空值。
4、外键(foreign key)约束:指明一列或几列的组合为外键以维护从表与主表之间的引用完整。
5、条件(check)约束:表中每一行都要满足该约束的条件。
约束是加在表上的,因为表中存有数据。既可以在创建表(create table)时定义约束,也可以在已经存在的表(alter table)上定义约束。
约束可以定义在列一级也可以定义在表一级,查看约束要在oracle的数据字典里浏览,
在建立约束时,可以给出约束名称也可以不给出,oracle系统将为约束自动生成一个名称,格式为SYS_Cn,其中n为大于零的自然数。
当一张表中的约束过多时会影响到oracle数据库的效率(这结论容易推出)。
约束存在4种状态,并且任何一个约束都处于4种中的一种状态!
1、disable novalidate 禁止而无效:表示表中的已有数据没有作约束检查,并且新加入的数据也不会作约束检查。
2、disable validate 禁止而有效:表示表中已有数据作了约束检查,但新加入数据不会检查。
3、enable novalidate 激活而无效:表示表中数据没有约束检查,但新加入的数据会约束检查。
4、enable validate 激活而有效:表示表中数据作了约束检查并且新加入数据也会约束检查。
oracle完整性约束的各种状态之间的变化遵循以下原则:
1、如果在激活约束时没有说明novalidate,就意味着enable validate。
2、如果在禁止约束时没有说明validate,就意味着disable novalidate。
3、如果唯一约束或主键约束从禁止状态变为激活状态时没有索引,oracle系统会自动地为之建立一个唯一索引。相反地会删除这个唯一索引。
4、当任何一个约束从无效变为有效时,oracle系统会检查所有数据。相反则不会。
5、将一个约束从激活无效状态变为激活有效状态时,oracle系统并不阻塞任何读、写操作及其它DDL语句。