当前位置:数据库 > Oracle >>

Oracle数据库的完整性约束规则详解

Oracle数据库的完整性约束规则详解
 
约束简介:
约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行。
 
完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: 
 
    Check 
    NOT NULL 
    Unique 
    Primary 
    Foreign key 
完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。
 
* 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约束,但如果某个约束作用于多个字段,必须在表级定义约束  
* 在定义约束时可以通过CONSTRAINT关键字为约束命名,如果没有指定,ORACLE将自动为约束建立默认的名称 
 
定义约束 
列级约束: 
column [CONSTRAINT constraint_name] constraint_type 
表级约束: 
column ,..., 
[CONSTRAINT constraint_name] constraint_type (column,...) 
 
 
check约束 
* 在CHECK约束的表达式中必须引用到表中的一个或多个字段,并且表达式的计算结果必须是一个布尔值  
* 可以在表级或字段级定义  
* 对同一个字段可以定义多个CHECK约束,同时也可以定义NOT NULL约束
CREATE TABLE emp06( 
eno INT,
name VARCHAR2(10),
salary NUMBER(6,2), 
CHECK (salary BETWEEN 1000 AND 5000) 
);  
 
not null约束
只能在字段级定义NOT NULL约束,在同一个表中可以定义多个NOT NULL约束
NOT NULL约束应用在单一的数据列上,并且他保护的数据列必须要有数据值。缺省状况下,ORACLE允许任何列都可以有NULL值。某些商业规则要求某数据列必须要有值,NOT NULL约束将确保该列的所有数据行都有值。
CREATE TABLE emp01( 
eno INT NOT NULL, 
name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL, salary NUMBER(6,2) 
);
 
unique约束
定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUED约束的字段上可以包含空值.
CREATE TABLE emp02( 
eno INT UNIQUE,
name VARCHAR2(10) CONSTRAINT u_name UNIQUE, 
salary NUMBER(6,2) 
);
 
primary key约束
ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引,一张表最多只能具有一个主键约束
CREATE TABLE depto04( 
dno INT PRIMARY KEY, 
dname VARCHAR2(10),
loc VARCHAR2(20) 
);  
 
foreign key约束  
* 定义为FOREIGN KEY约束的字段中只能包含相应的其它表中的引用码字段的值或者NULL值  
* 可以为一个或者多个字段的组合定义FOREIGN KEY约束  
* 定义了FOREIGN KEY约束的外部码字段和相应的引用码字段可以存在于同一个表中,这种情况称为"自引用"  
* 对同一个字段可以同时定义FOREIGN KEY约束和NOT NULL约束  
 
定义了FOREIGN KEY约束的字段称为"外部码字段",被FORGIEN KEY约束引用的字段称为"引用码字段",引用码必须是主码或唯一码,包含外部码的表称为子表,包含引用码的表称为父表.
CREATE TABLE emp04( 
eno INT,
name VARCHAR2(10),
salary NUMBER(6,2), 
dno INT CONSTRAINT fk_dno REFERENCES dept04(dno) 
); 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,