Oracle 数据完整性与约束机制

时间:2021-09-30 22:29:51

为了维护数据库数据的完整性,在创建表时需要定义一些约束,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;