人大金仓数据库KingbaseES-数据库表的继承

关键字:

父表、子表、人大金仓、KingbaseES

1. 什么是数据库表继承

表继承是数据库中的一个基础特性,他是一种将多个表组织成一个继承层次结构的方式。它允许创建一个父表,然后从父表继承子表。那么子表继承了父表的结构,包括列、索引和约束。子表可以添加自己的列、索引和约束,但是不能删除父表的列、索引和约束。表继承的主要优点是可以将数据分解成更小的逻辑单元,从而使数据更易于管理和维护。此外

2.表继承的案例

案例1:

create table father (name text,age int, sex bool);

create table son (number int) inherits ( father );

insert into son values ('男',15,true,01);

insert into son values ('男',16,false,02);

insert into father values ('男士',25,true);

select * from father ;

select * from son ;

上面的语句显示了创建了一个常见的表,并且创建了son表来继承这个表,随后在向son表插入数据的时候,我们把father表中的表结构对应的数据类型也在son表中进行插入,插入成功,并且在子表的查询时查询不到父表的内容的,但是在对父表进行查询时是可以查询到子表的内容的。

案例2:

再看一个案例,这里我们为父表创建了检查约束、非空约束、主键约束以及唯一性约束,为了验证这些约束在父表中存在,但在子表中是否存在,对父子的表结构进行查询

create table father1 (a int, b int not null,c int primary key,d int unique check(a > 0));.

create table son1 (e int) inherits ( father1 );

可以看到,父表中的主键以及唯一性约束在子表中并不存在,只有检查约束与非空约束被子表继承了下来。

insert into son1 values (-1,2,2,1,99);

insert into son1 values (1,null,2,1,99);

insert into son1 values (1,2,null,1,99);

上面得了两个案例分别违反了父表中的检查约束和非空约束,但是因为第三列的主键约束中包含非空约束的概念,因此在子表中,虽然对应的主键约束不在,但是主键约束附带的非空约束也被继承到了子表中,因此向第三列插入空值也会提示错误。

insert into son1 values (1,2,2,1,99);

insert into son1 values (1,2,2,1,99);

这里向子表插入两条相同的数据,如果第四列继承了父表中的唯一约束的话,那么第二条数据应该是插入失败的,但是仍然插入成功,那么,唯一约束也不会进行继承。

此时可以再对父表进行验证,唯一性约束是存在的。

案例3:

create table son11 (a int,f int) inherits ( father1);

这里重新创建一个子表,仍然继承案例2的父表,并且令子表中的列名与父表重合,可以看到,如果列名重合,数据库会给出提示,并将两个字段合并为一个字段。

但是如果创建的子表类型与父表不同,那么就无法进行合并。

案例4:

当对父表进行查询、更新等操作时,可以发现,子表一会同时被操作。

如下图,对父表进行查询,可以看到子表中插入的对应的父表列的值。

如下图所示,如果在父表中对数据进行修改,那么修改后无论是对父表还是子表进行数据查询,显示的均为修改后的值

参考资料

《KingbaseES SQL语言参考手册》

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值