Oracle 数据完整性与约束机制
为了维护数据库数据的完整性,在创建表时需要定义一些约束,Oracle中的约束类型包括:非空约束、主键约束、唯一约束、外键约束等。在对约束操作前,我们可以通过表名查询它具有的约束信息。
表约束
SELECT table_name, owner,constraint_name,table_name,r_owner,r_constraint_name
FROM all_constraints
WHERE table_name = 'T_TEST1';
列约束
SELECT *
FROM ALL_CONS_COLUMNS
WHERE table_name = 'T_TEST1'
AND owner='SCOTT';
1 非空约束
非空约束限制某列必须有值,不能为NULL,NULL是不存在的值,它既不是数字0也不是空字符串,而是不存在,未知的情况。定义非空约束非常简单:
create table t_test1
(
id number not null, -- 非空约束
name varchar2(50)
);
也可以单独设置某列为非空或者为空
alter table t_test1 modify name not null/null;
2 主键约束
主键(primary key)约束用于唯一标识表中的每一行记录。主键约束由一列组成时,被称为行级约束;由两列或者更多列组成时,称为表级约束。
create table t_test1
(
id number not null, -- 非空约束
name varchar2(50),
constraint PK_ID primary key(id) --主键约束
);
单独设置主键约束
alter table t_test1 add constraint PK_ID primary key(id);
删除主键约束
alter table t_test1 drop constraint PK_ID;
3 唯一性约束
唯一性约束(unique)强制要求所在列不能有重复值,它的定义比主键约束弱,允许列有空值(NULL)。用于保证除主键外其他列值的唯一性。
create table t_test1
(
id number not null, -- 非空约束
name varchar2(50) constraint uk_name unique -- constraint un_name unique(name)
);
单独设置唯一性约束
alter table t_test1 add constraint uk_name unique(name);
4 外键约束
外键约束使用两个或者以上的表进行关联,表1引用表2的某列或者几列,表1的列在表2必须存在,且表2的列必须为主键约束或者唯一性约束。
create table t_department
(
depno number not null primary key,
depname varchar2(50) not null
);
create table t_test1
(
id number not null,
depno number not null,
name varchar2(50)
);
alter table t_test1 add constraint FK_depno foreign key(depno) references t_department(depno);
5 禁用激活约束
alter table t_test1 disable constraint FK_DEPNO;
alter table t_test1 enable constraint FK_DEPNO;
6 删除约束
alter table t_test1 drop constraint FK_DEPNO;