赞
踩
postgres=# create table cstech(age int, name varchar(10), class int);
CREATE TABLE
# 这里我们采用select * 来选择所有字段
postgres=# create view cs_v as select * from cstech;
CREATE VIEW
postgres=# insert into cstech values(22, 'lxcos', 1);
INSERT 0 1
# 可以发现使用select *获取到的字段其实在创建视图的时候内部已经转换成了对应的字段名称
postgres=# select * from cs_v;
age | name | class
-----+-------+-------
22 | lxcos | 1
(1 row)
postgres=# alter table cstech add column school text;
ALTER TABLE
postgres=# select * from cs_v;
age | name | class
-----+-------+-------
22 | lxcos | 1
(1 row)
针对上面的select * 创建的视图获取到基础表的所有字段内容,我们做一个测试,不难发现在基础表上新增字段后,对已建的视图是没有影响的,新的字段内容并不会自动添加到视图上。
postgres=# alter table cstech alter column class type text;
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view cs_v depends on column "class"
对于被视图引用的字段,是不允许被修改类型的,如果需要修改类型,需要先删掉视图,修改后再重建视图。
postgres=# alter table cstech rename class to class_info;
ALTER TABLE
postgres=# select * from cs_v;
age | name | class
-----+-------+-------
22 | lxcos | 1
(1 row)
可以看到修改基础表的字段名,对应视图的的字段名称没有自动同步过来,是没有生效的。
postgres=# alter table cstech alter column name type varchar(20);
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view cs_v depends on column "name"
同样,被视图引用的字段,是不允许被修改字段长度的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。