一、创建可更新视图:
create or replace view usa_city as
select city_id,city,country_id
from city
where country_id=103 order by city;
select * from usa_city;
更新视图插入数据:
insert into usa_city (city,country_id )values ('Birmingham', 102);
结果:插入成功,但是此插入的结果并不在视图usa_city中
插入的新行在视图中不可见。这可能会造成安全问题,为防止用户插入或更新通过视图不可见的行,在创建视图时可使用
WITH CHECK OPTION 子句。
二、创建有检查项的可更新视图
create or replace view usa_city as
select city_id,city,country_id
from city
where country_id=103 order by city
with check option;
更新视图插入数据:
insert into usa_city (city,country_id )values ('Birmingham', 102);
结果:> 错误: 新行违反了视图"usa_city"的检查选项
insert into usa_city (city,country_id )values ('Birenc', 103);
结果:插入成功,且只允许插入的数据满足原视图的where条件
三、检查项含local的可更新视图
(1)、创建一个可更新的基表视图
create or replace view usa_a as
select city_id,city,country_id
from city
where city like 'A%';
(2)、创建检查项含local的可更新视图
create or replace view usa_a_city as
select city_id,city,country_id
from usa_a
where country_id=103 order by city
with local check option;
更新视图插入数据:
insert into usa_a_city(city,country_id)values('Mirmin', 103);
结果:插入成功,因为usa_a_city视图只需要检查自身的插入数据是否满足where条件即可
insert into usa_a_city(city,country_id)values('Mirmin', 102);
结果:插入失败,> 错误: 新行违反了视图"usa_a_city"的检查选项
(3)、创建检查项含cascaded的可更新视图
create or replace view usa_a_city as
select city_id,city,country_id
from usa_a
where country_id=103 order by city
with cascaded check option;
更新视图插入数据:
insert into usa_a_city(city,country_id)values('Meery', 103);
结果:插入失败,> 错误: 新行违反了视图"usa_a"的检查选项
因为usa_a_city视图使用了cascaded级联检查,即本身的where条件要满足同时也要满足基表视图的where条件
insert into usa_a_city(city,country_id)values('Aeery', 103);
结果:插入成功,同时满足了本身视图的where条件,也满足了基表视图usa_a的where条件
PostgreSQL包含check-option可更新视图
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 此文是记录数据库平常的学习遇见的一些知识点 视图WITH CHECK OPTION子句 建立测试表和两个视图 这就...
- 解决办法: 改为:pip3 install --user lxml 原因:未知~_~
- 背景 某个线上环境运维人员执行了一条命令,在很短的时间内造成了web服务不可用的严重后果,后来重启服务器恢复正常....