PG中的表继承和only关键词

1    2546    8

Tags:

👉 本文共约3292个字,系统预计阅读时间或需13分钟。

官网:http://postgres.cn/docs/13/ddl-inherit.html

表继承简介

相似于程序语言的类继承,PostgreSQL的表也可以继承(Table Inheritance)。创建继承表的操作如下:

这是先创建了cities表,然后创建了继承cities的capitals表。capitals的表中除了其特有的state列外,还含有和cities全部列相同的列。

因为表中没有内容所以看不出端倪,先插入数据。

第一个查询,是广义的,capitals继承了cities,所以capitals中的内容也会出现。

第二个查询,是查询capitals的。相当于单查黄狗。

第三个查询,是只查询cities中的,cities之前的only用于指示查询只在cities表上进行而不会涉及到继承层次中位于cities之下的其他表。select ,update,delete都支持only关键字。

第四个查询,和第1个查询一样。在表后面写一个*表示显式指定包括所有子表。写*并不是必须的,不过写在表后面 可以用于强调搜索额外的子表。

假使我们想知道某个行版本来自哪个表?在每个表里我们都有一个tableoid系统属性可以告诉你源表是谁:

可以看到结果来源于两个表。

约束继承

使用INHERITS创建的新表会继承一个或多个父表,子表只会继承父表的表结构和NOT NULL,DEFAULT,CHECK三种约束,主键,外键和唯一键以及索引不会被继承,所以修改父表的结构(增删字段),NOT NULL,DEFAULT和CHECK约束会自动同步子表修改。

  • 示例1.

  • 示例2.

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

1 条回复

  1. Avatar photo 小麦苗说道:

    需要注意2点:
    1、如果只想查询父表的数据,那么需要在父表名称前加上only关键词。
    2、对于UPDATE、DELETE和SELECT操作,如果在父表前不加only关键词,则会对父表和所有子表进行DML操作。所以,对于使用了继承表的场景,对父表的DELETE和UPDATE操作需要谨慎,因为会对父表和所有子表的数据进行DML操作。

发表回复