视图

一,概念

    视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。

   视图相对于普通表的优势主要包括以下几项:

    1,简单:使用视图的用户完全不需要关心后面对应表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

    2,安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到莫行某列,但通过视图就能够简单的实现。

    3,数据独立:一旦视图的结构确定,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。


二,视图操作


   包括创建,修改,删除,查询操作。


1,创建

   创建视图需要有create view权限,并且对于查询涉及的列有select权限,如果使用create or replace 或者alter修改视图,那么还需要drop权限。

 

mysql> create or replace view t13_view as select a.id,a.name,a.age from t13 a;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from t13_view;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | fzy1 |    1 |
|  2 | fzy2 |    2 |
|  3 | fzy3 |    3 |
+----+------+------+
3 rows in set (0.00 sec)

  mysql 定义的视图有一些限制,如:在from关键字后不能包含子查询,这和其他数据库是不同的。

   视图的更新性和视图中查询的定义有关系,一下类型视图是不可更新的:

  (1) 包含以下关键字的sql语句,聚合函数(sum,min,max,count等),distinct,group by, having ,union ,unonall

     (2)  常量视图

   (3)select 中包含子查询

   (4)jion

   (5)from一个不能更新的视图

   (6)where 字句的子查询引用了from字句中的表

如:下列语句都是不可更新的:

--包含聚合函数
mysql> create or replace view t13_view1 as select count(*) from t13;
Query OK, 0 rows affected (0.03 sec)

--含常数
mysql> create or replace view t13_view2 as select 3.14 ip;
Query OK, 0 rows affected (0.04 sec)

--含子查询
mysql> create or replace view t13_view3 as select (select name from t13 where id=1);
Query OK, 0 rows affected (0.05 sec)

  with[cascaded|local] check option决定了是否允许更新数据使记录不再满足视图的条件:

     其中,local只要满足本视图的条件就可以更新,cascaded则必须满足所有针对该视图的所有条件才可以更新。如果没有明确是local还是cascaded则默认是cascaded。






 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值