(1)、ORACLE支持五种类型的完整性约束
NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值。
CHECK (检查)--检查在约束中指定的条件是否得到了满足。
UNIQUE (唯一)--保证在指定的列中没有重复值。在该表中每一个值或者每一组值都将是唯一的。
PRIMARY KEY (主键) --用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束。
FOREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键。
(2)、主键、唯一键、外键
主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引;外键是定义一个表中的某数据项的数据,要参照另一个表的主键(或唯一键)数据。即:没有在另一个表的主键(或唯一键)数据中出现的数据,不允许在这个表的外键数据项中出现。
主键:表中记录的唯一标识,一张表只能有一个主键;能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键;主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针。
外键:依赖于别的表的数据,所定义的外键是另一张表的主键(或唯一键)
唯一键:可以确定一条记录的字段(或字段组合),一张表可以有多个唯一键
主键和唯一键的区别:主键是不允许为NULL的,唯一键则可以,当然可以加上NOT NULL来限制它;唯一性约束所在的列允许空值,但是主键约束的列不允空值
(3)、约束管理
添加约束
--建立唯一键
alter table SUB_TABLE
add constraint UK_SUB unique (SUB_PROPERTY);
--建立主键
alter table MAIN_TABLE
add constraint pk_main_id primary key (ID);
--建立外键
alter table SUB_TABLE
add constraint fk_sub foreign key (MAIN_ID)
references main_table (ID);
--建立CHECK
alter table SUB_TABLE
add constraint CK_1
check (ID<>'5');
--设置NOT NULL
alter table SUB_TABLE modify SUB_PROPERTY not null;
删除约束
1、主键、外键、唯一键、CHECK的删除
ALTER TABLE SUB_TABLE DROP CONSTRAINT FK_SUB;
2、不为NULL约束删除
alter table SUB_TABLE modify SUB_PROPERTY null;
修改维束名:
ALTER TABLE Sub_Table RENAME CONSTRAINT CK_1 to CK_ID;
子表中的外键字段处理
通过引用行为可以确定如何处理子表中的外键字段。引用类型包括3中类型:
1、on delete cascade;--- 级联删除
2、on delete set null;--- 删除主表中的记录后,子表中的相应记录的列被设置为null(但子表的该字段必须支持null值)。
3、no action;--不允许删除主表中被引用的数据,该操作会被禁止。即如果子表中存在对主表数据的引用,不能删除主表的数据,只有先删除子表中数据后,才能删除主表数据。默认的选项。
(4)、约束相关查询
SELECT OWNER, CONSTRAINT_TYPE, CONSTRAINT_NAME, TABLE_NAME, STATUS
FROM USER_CONSTRAINTS;
SELECT OWNER, CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM USER_CONS_COLUMNS;
(5)、约束的学习测试脚本
1、create_table.sql
2、create_key.sql
3、insert_test_data.sql