您的位置:首页 > 数据库 > Oracle

ORACLE学习之路--管理数据完整性约束

2010-01-10 17:45 169 查看
通常在我们在做项目开发的时候,不可避免的要遇到保证数据完整性的问题,对于数据完整性我们通常有三种手段:CODE、TRIGGER和CONSTRAINTS。有关通过项目代码和触发器来实现数据完整性的维护问题,今天就不做讨论。下面我们来看看在ORACLE中如何使用CONSTRAINTS来实现数据完整性的约束。

一、CONSTRAINTS的基本约束类型

NOT NULL 非空,UNIQUE 唯一,PRIMARY KEY 主键,FOREIGN KEY 外键和CHECK数据检查。

1、NOT NULL(非空)

通过名字可以很清楚的了解NOT NULL的约束即所约束的列不允许插入NULL值,通常用来约束表中的查询字段,在没有定义的列默认是NULL即可以插入空值。同时它也是唯一可以用在XMLTYPE和变长数组列的约束。

如:CREATE TABLE EMPLOYEE (EMP_ID NUMBER NOT NULL,

EMP_NAME VARCHAR2(20))

2、CHECK(检查)

就是根据表创建时指定的条件对数据进行检查返回TRUE或FALSE。CHECK可分为表级约束和列级约束,如果只是检查某一列的值可以在创建时写在该列的后面,如果要检查多列则需要在定义了全部列后再做定义。在指定CHECK条件的时候可以使用部分ORACLE的函数。如:

单列:

CREATE TABLE EMPLOYEE (EMP_ID NUMBER NOT NULL,

EMP_NAME VARCHAR2(4) CONSTRAINT check_empname CHECK(LENGTH(EMP_NAME) <= 4);

多列:

CREATE TABLE EMPLOYEE (EMP_ID NUMBER NOT NULL,

EMP_NAME VARCHAR2(4) ,

SALARY NUMBER,

SALARY_ASIG NUMBER

CONSTRAINT check_salary CHECK(SALARY > SALARY));

第一段代码是保证输入的姓名长度为4个字,第二段是保证输入的销售额必须大于销售任务。

3、UNIQUE(唯一性约束)

即约束了该列的值不能够有重复值,不过允许多行NULL,因为NULL在ORACLE的定义为不确定。在我们为某行定义唯一约束的时候,如果该行本身已定义了INDEX,则唯一约束则使用该INDEX所为UNIQUE INDEX来做数据的唯一判断,如果该列还没有INDEX,则系统会自动创建一个隐式的INDEX,这个INDEX在动态视图里是可以查询到的,不过却无法删除,它只会伴随UNIQUE约束的删除而被删除。因为UNIQUE约束要创建INDEX就涉及到空间分配问题,这个定义可以在创建的时候指定,如果没有指定,则根据表所在的TABLESPACE定义来定义。如:

CREATE TABLE EMPLOYEE (EMP_ID NUMBER CONSTRAINT emp_id_u UNIQUE,

EMP_NAME VARCHAR2(4))

上面的SQL语句在EMPLOYEE表的EMP_ID字段上定义了一个唯一性约束。这时系统会为EMP_ID这一列自动添加INDEX,存储结构使用的是该表空间定义的结构。

CREATE TABLE employee( emp_id NUMBER(6),
emp_name varchar2(2),
CONSTRAINT emp_id_u UNIQUE (emp_id)
USING INDEX PCTFREE 20
TABLESPACE stocks
STORAGE (INITIAL 8K NEXT 6K) );

上面的SQL 在定义UNIQUE的时候同时指定了PCTFREE,TABLESPACE和STORAGE

4、PRIMARY KEY(主键约束)

主键约束是我们经常能用到一种约束,也是在使用SSH架构开发项目时要求必须要加的约束。PRIMARY KEY = UNIQUE + NOT NULL,从上面的公式大家可以很形象的了解主键约束,它是即是唯一性约束同时又限制不能有NULL的出现,其自动生成的INDEX遵循和UNIQUE相同的规则,它和UNIQUE不同的是一张表只能有一个主键约束,但可以和UNIQUE一样由多列组成,特别的是有些类型的列是不能作为主键的,如:LOB、LONG、TIMESTAMP WITH TIME(但却可以包含TIMESTAMP WITH LOCAL TIME ZONE)等。多列组成的主键其列数不能超过32列。代码如:

CREATE TABLE employee (emp_id number CONSTRAINT pk_employee_id PRIMARY KEY,emp_name varchar2(4));或

CREATE TABLE employee (emp_id number,emp_name varchar2(4),CONSTRAINT pk_emp_id_name PRIMARY KEY(emp_id,emp_name));

5、FOREIGN KEY(外键约束)

外键约束可以理解为通过外部条件来约束表中数据,当然外键也具有反作用。

未完待续... ...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: