视图
1 视图的定义
视图是由查询结果形成的一张**虚拟表,**是通过某种运算得到的一个投影.
同一张表可以创建多个视图.
创建视图的方法:
create view view_name
as select 语句
说明:
1 视图名和表明是一个级别的名字,隶属于数据库(在A数据库中创建的视图不能在B数据库中使用)
2 该语句的含义可以理解为:就是将该select语句命名为该名字(视图名)
3 视图也可以设定自己的字段名,而不是select语句本身的字段名—通常不设置
4 视图的使用几乎和表一样.
视图的作用
一 可以简化查询
案例1: 查询平均价格前3高的栏目.
传统的SQL语句写法.
查询ecs_goods表的cat_id,和商品的平均价格 并且根据cat_id分组再根据平均价格降序排列.
使用limit获取前三条数据
那么这种SQL是比较长的,为了简化查询,先创建视图
那么为了得到查询的数据并且简化查询,我们只需要查询视图即可
现在为了得到前三条数据则为查询增加条件
案例2:查询出商品表,以及所在的栏目名称:
同上;
传统sql写法:
创建视图简化查询:
二 可以根据权限控制
把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据,比如某张表用户表为例
2个网站搞合作,可以查询对方网闸的用户,需要向对方开放用户表的权限,但是呢,又不想开放用户表中的密码字段.
再比如一个goods表,两个网站合作,可以相互查询对方的商品表,但是进货价格不能让对方查看.
表和视图的关系
视图是表的查询结果,自然表的数据改变了,影响视图的结果.同样,视图改变也会造成表的改变.
① 视图的数据与表的数据一一对应(没有牵扯到计算),可以修改.
② 视图增删改查也会影响表,但是视图并不是总是能增删改的.例如一个视图的平均价格字段是通过表调用avg函数得出的结果,但是通过视图直接修改平均价格是不通过的.
③ 对于视图insert还应注意,视图必须包含表中没有默认值的列.(换句话说,insert插入视图的时候,需要在视图中把没有默认值的字段设置上值才可以插入,不然无法完成插入)
注意,视图一般是用来查询的,不应该执行增删改操作.