视图

来源:互联网 发布:程序员回家等于失业 编辑:程序博客网 时间:2024/06/04 00:08

1.4  使用视图的原因

      1.一个视图可以展示计算结果

      2.视图可以限制某些展现的列

    3.视图可以用来选择数据重多个表中

   4.视图可以用来展示对于不同的用户展示不同的内容

   5.如果你没有改变表的结构来适应可能的应用程序,视图可以保存元素表结构来最小化损坏其他的应用程序。

14.2 创建视图

    create [or replace ] [algorithm=algorithm_type]

  view view_name[(column_list)]

   as select_statement

  [WITH [CASCADED | LOCAL] CHECK OPTION]

   select_statement是选择语句它表明真有获取数据党视图。

   可选的部分:

     1.or replace 语句引起任何存的视图作为新的而抛弃原来的

   2. algorithm指明算法

   3.column_list提供视图列的名字来覆盖默认的名字

   4.当WITH CHECK OPTION语句被包含在视图定义中,所有数据的改变来确保新的或改变满足视图定义的条件。如果条件没有被满足,改变不会被接收。

   create View CityView as SElect ID,Name From city;

   如果一个视图名字已经存在会产生错误,避免create or replace view cityview as select id,name from city;

重新定义视图列的理由:

1. 视图列名字必须是唯一的,create View v (CountryName,cityName) as select Country.name,city.name from Country ,city where code=countryCOee;

2.明确定义列明可以使他更容易使用列。ceate view CountryLangCount as select Name,Count(Language) From Country ,.........改变为

create view CountryLangCount (Name,LangCount) as select name,count(Language) from country,countryLanguage where code=countrycode gruop by name;另外的一种方式是在选择是使用别名:

selecte Name ,count(Language) as langCount

   使用视图的注意:

   1.一个视图定义是使用where,当使用视图是也是用了where就是两个where的组合

    2.如果一个视图定义包含orderby语句,它被用于排序视图结果除非引用视图是包含了它自己的ordery by语句。在这种情况下,视图定义order by被忽略

    3.对于一些选项,如HIGH——priority ,可以设置忽略视图的选项

14.2.1 视图的限制

    1.不能创建临时视图

   2.不能创建触发器到一个视图

  3.表在视图必须基于已经存在的表

  4.在创建视图是的选择不能包含下面的条件:1.子查询在FROM语句中 2.引用TEMPORARY表 3.引用用户变量 4.引用过程从那时,如果视图定义发生在一个存储过程 5.引用预处理语句

14.2.2 View算法

Algorith={undefined|Merge|Temptable}对于Undefined ,Mysql自己选择算法

对于MERGE,mysql处理语句执行合并的结果,查询条件AND

对于TEMPTABLE,MYSQL处理语句应用视图获取视图内容到一个临时表,然后使用临时表到完成执行语句。

这MERGE算法需要一对一的,如果来自多个表不能使用merge算法。

对于含有聚合函数和子查询的通过创建临时表来满足。

当创建视图是没有必要指定算法

14.2.3 更新视图

如果含有聚合函数时无法更新,必须是一个视图对于一个表时才可以使用更新,必须是简单的应用而不是表达式。


    1.视图可以被更新是where语句仍旧满足条件

   2. insert满足是where语句对于新行仍旧满足

如果算法ALGORITH=TEMPTABLE时,with check option是排他性的,因为TEMPTABLE让视图没有更新

14.3 更新视图

alter view largePop as select name,population from countryPop where population >=10000000;

14.4 删除视图

drop view [IF EXISTS] view_name [, view_name]...;

drop view IF Exists v1,v2;

14.5 检测视图

创建视图是,基于的表或列必须存在 check table来检测

14.6 获取视图的属性数据

select * from information_schema.views

where table_name='CityView'

AND table_schema='world'\G

>show create view cityView

14.7特权

1.对于表的列,你必须有获取列的特权,例如select ,insert或者update

 2.对于访问的列,例如在一个where或者group by语句,你必须有选择的特权

对于使用or replace语句值一个粗昂及语句或使用alter必须有删除drop的特权

如果你有了更新视图的特权,但是并不意味着你可以直接更新表,show create view语句需要select特权。如果视图定义对于表你没有特权,你必须有show view特权除了select外。



0 0
原创粉丝点击