注册
达梦数据库约束建立和查看
技术分享/ 文章详情 /

达梦数据库约束建立和查看

Brainy 2022/04/26 7594 4 0

  数据库可以通过各种约束实现对入库数据的规范,在数据库中我们常见的约束有唯一性约束、引用约束和检查约束。每种约束在达梦数据库里也可以通过不同的方式实现,下面我们介绍下每种约束的实现方式以及查看方式,供大家参考。

一、唯一性约束

  从名字上也能看出来,唯一性约束保证对应字段存储的数据是唯一的,不允许重复,唯一性约束可以针对一个字段或者多个字段。
  达梦均是通过唯一性索引的方式实现唯一性约束,可以通过不同的方式建立。

1.建表时建立

  1) 建表时指定ID字段为唯一约束列

create table test.cons_tab(id int,id1 NUMBER,id2 number, unique(ID));

  添加约束语法:

alter table test.cons_tab add constraint unique(ID);

  通过该种方式创建的唯一性约束,可以在约束中看到,并且自动生成了唯一性(Unique)索引。客户端中查看方式:
1.png
  对于该种方式建立的唯一性约束,可以通过如下语句查询:

--唯一性约束查询
select * from SYS.DBA_CONSTRAINTS where table_name='CONS_TAB' and constraint_type='U';
--唯一性索引查询
select * from all_indexes where table_name='CONS_TAB' and uniqueness='UNIQUE';

  2)建立表时,指定id为主键,则id列非空并且唯一

create table test.cons_tab(id int,id1 NUMBER,id2 number,primary key(id));

  主键字段也会自动生成唯一性索引,会在表下的键中以蓝色钥匙标识,并且主键字段非空。通过管理工具查看:
2.png
  也可通过如下的SQL进行查询:

--唯一性约束查询
select * from SYS.DBA_CONSTRAINTS where constraint_type='P' and table_name='CONS_TAB';
--唯一性索引查询
select * from all_indexes where table_name='CONS_TAB' and uniqueness='UNIQUE';

2. 建立唯一性索引

  对于唯一性约束,还可以直接建立唯一性索引。语句如下:

CREATE UNIQUE INDEX INDEX_UNIQ_ID_CONS_TAB ON test.cons_tab(ID);

  此种方式建立的唯一性约束在表下的约束和键中均无对应的对象。通过客户端查看如下:
3.png
  也可通过如下的SQL进行查询:

select * from all_indexes where table_name='CONS_TAB' and uniqueness='UNIQUE';

3. 条件表达式方式的唯一性约束

  上述唯一性约束均是针对表中一个字段或多个字段实际存入的原始值进行唯一性判断,现在还有一种唯一性需求,如CONS_TAB表,对于ID1大于0的情况下,要求ID1和ID2的组合唯一,而ID1小于0时是允许ID1和ID2的组合重复的。针对这种唯一性约束,可以通过条件表达式索引来实现。

create unique index index_cons_tab_id12 on test.cons_tab(case when id1<0 then null else cast(id1 as varchar)||','||cast(id2 as varchar) end);

  该种方式通过case when条件表达式实现了不同情况下的唯一性要求。该种类型的唯一性索引在ALL_INDEXES系统视图中的INDEX_TYPE为FUNCTION-BASED NORMAL。

二、引用约束

  对于引用约束,实现的是表与表之间字段的引用关系,通过外键来实现。

create table test.fk_tab(id number,id_fk int,primary key(id));
create table test.cons_tab(id int,id1 NUMBER,id2 number,primary key(id));
alter table test.cons_tab add constraint foreign key(id2) references test.fk_tab(id) with index;

  建立了外键后会在表下的键中出现一个灰色钥匙的外键约束,因为建立外键时增加了with index属性,所以会自动建立外键列的索引,在外键表数据量大了以后,可以提高对主键列操作的速度。
4.png
  也可通过如下的SQL进行查询:

select * from SYS.DBA_CONSTRAINTS where constraint_type='R' and table_name='CONS_TAB';

三、非空约束

  非空约束即字段的值不允许为空,在建立表或者建表后都可以设定表的非空约束。对于主键列默认即为非空。可通过如下SQL进行设置:

--建表时
create table test.cons_tab(id int,id1 NUMBER not null,id2 number,primary key(id));
--建表后增加
alter table test.cons_tab alter id2 set not null;

  客户端中查看方式:
5.png
  也可通过如下的SQL进行查询:

select * from SYS.ALL_TAB_COLS where table_name='CONS_TAB' and nullable='N';

总结

  上述方式介绍了在达梦数据库中常见约束的建立和查看方式,另外在数据库中还可以通过触发器方式实现对数据的约束,当然实现方式相对复杂,但是可以实现更细致的约束需求。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服