PostgreSQL支持表继承,这是它特有的功能。
1.建表
例:创建person表作为父表,student表是继承它的子表。
CREATE TABLE person (
id int,
name varchar(20)
);
CREATE TABLE student (
classId int
)INHERITS(person);
执行结果:
person表
student表
我们可以看到,student表继承了person表的列id和name,还拥有自己的列classid。
2.查询数据
先说结论:查询父表时,会将子表中的数据也显示出来;查询子表时,不会显示父表中的数据。
首先,分别向父表person和子表student中插入数据。
insert into person values(0,'Dava');
insert into student values(1,'April',100);
insert into student values(2,'Harris',101);
然后,查询两张表,观察它们的特点。
select * from person;
执行结果:
select * from student;
执行结果:
上述结果证明了:查询父表时,会将子表中的数据也显示出来;查询子表时,不会显示父表中的数据。
注:1.父表的检查约束和非空约束会被子表继承。其他约束(如唯一约束,主键,外键)则不会被继承。
2.一个子表可以从多个父表继承,当同名字段出现在多个父表中(或者父表和子表中),这些字段会被融合(此时字段类型必须相同,否则会抛出一个错误)。