数据完整性与约束性

时间:2021-01-10 08:47:57

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