数据库中视图相关

1.定义一个新的试图
create view v_test
as select *
form test
where id>=1001;
//如果需要对列重新命名,可以使用以下方式
create view v_test(dept_id,total_salary)
as select dept_id,sum(salary)
from test
group by dept_name;
//或者
create view v_test
as select dept_id,sum(salary) as total_salary
from test
group by dept_name;
 
    当定义一个视图时,数据库系统存储的是定义视图所使用的查询表达式本身,而不保存定义该视图的查询结果,用以保证无论我们何时执行这个查询,视图关系都被重新计算。
    聚集结果(视图)一般会比定义视图的大关系要小得多,利用物化视图来回答查询会增加查询速度,避免了读取大的底层关系,不过,在定义物化视图的时候,需要考虑到物化视图查询所带来的好处还需要与存储代价和增加的更新开销相权衡
    一个视图允许出现在任何关系名可以出现的地方,也就是说,可以使用在定义另一个视图的表达式中,也可以用于insert语句中,在视图中插入数据时,需要考虑到定义物化视图的底层关系属性的限制,一般会使用两种解决方法来处理该插入:
    1)拒绝该插入,并向用户返回错误信息;
    2)向关系中插入新的数据,并将视图中不存在的属性的值定义为null。
    一般来说,如果定义视图的查询对下列条件都能满足,则该视图称为可更新的(updatable):
    1)from子句中只有一个数据库关系;
    2)select子句中只包含关系的属性名,不包含任何的表达式、聚集或distinct声明;
    3)任何没有出现在select语句中的属性允许取空值;
    4)查询中不含有group by或having语句。
    默认情况下,一个可更新的视图允许插入 不满足视图所要求的选择条件 的元组,可以使用with check option子句定义视图,拒绝不满足视图要求的选择条件的元组的插入或更新,定义方式如下
    create view v_test
    as select *
    from test
    where salary>10000
    with check option;
    当插入或更新一条纪录时,salary小于10000时,数据库会拒绝该元组的插入或更新。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章