ORACLE学习之路--管理数据完整性约束
来源:互联网 发布:斗鱼小杰 程序员 编辑:程序博客网 时间:2024/06/02 06:49
通常在我们在做项目开发的时候,不可避免的要遇到保证数据完整性的问题,对于数据完整性我们通常有三种手段: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(外键约束)
外键约束可以理解为通过外部条件来约束表中数据,当然外键也具有反作用。
未完待续... ...
- ORACLE学习之路--管理数据完整性约束
- oracle数据完整性约束
- Oracle 数据完整性,约束
- Oracle中数据完整性约束
- Oracle中数据完整性约束
- Oracle中数据完整性约束
- oracle---数据完整性和约束
- oracle数据的完整性约束
- oracle学习 数据完整性
- Oracle之数据完整性
- Oracle数据完整性约束常用操作
- 插入数据违反完整性约束(oracle)
- Oracle维护数据完整性——约束
- Oracle(14)数据完整性约束
- Oracle数据完整性和约束性
- oracle 基本操作三:DML语句,数据完整性之约束,约束的维护
- sql2005数据完整性之约束和规则
- Oracle数据完整性学习笔记
- 虚心学习啊~~
- the physical assessment
- 男女上床前后经典对话(笑话)
- UML听课笔记
- 用MyEclipse 整合ssh框架时的jar包冲突问题
- ORACLE学习之路--管理数据完整性约束
- OpenGL开发进程安排
- 基于短语的解码器的实现
- PHP自学日记
- 另一种视角体验设计文档-概要设计
- DB 之间的一键同步
- [VB]发三个近期学习Windows Socket API之后写的作品~~~~
- Windows Socket 网络编程(三) —— Windows Sockets程序设计
- MFC-控件变量