十一、视图

一、视图概述

1.1视图的含义:数据库中的视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一分,通过试图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若及本表的数据发生变化,则这种变化也可以自动地反映到视图中。

1.2视图的作用

  • 简单化:看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  • 安全性:通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定的列上,通过视图,用户可以被限制在数据的不同子集上:使用权限可被限制在基表的行的子集上、使用权限可被限制在基表的列的子集上、使用权限可被限制在基表的行和列的子集上、使用权限可被限制在多个基表的连接所限定的行上、使用权限可被限制在基表的数据的统计汇总上、使用权限可被限制在另一个视图的一个子集上,或是一些视图和基表合并后的子集上。
  • 逻辑数据独立性:视图可以帮助用户屏蔽真实表结构变化带来的影响。

二、创建视图:视图中包含了select查询的结果,因此视图的创建基于select语句和已存在的数据表,视图可以建立在一张表上,也可以建立在多张表上

 2.1创建视图的语法形式
     create [or peplace] [algorithm={undefined|meger|temptable}]
          view view_name [(column_list)]  as select_statement
      [with[cascaded|local] check option]
其中,create 表示创建新的视图;replace表示替换已经创建的视图;algorithm表示视图选择的算法;view_name为视图的名称,column_list为属性列;select_statement表示select语句;with[cascaded|local] check option参数表示视图在更新时保证在视图的权限范围之内。
   algorithm的取值有3个,undefined表示MySQL将自动选择算法;merge表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;temptable表示将视图的结果存入临时表,然后使用临时表来执行语句。
 cascaded与local为可选参数,cascaded为默认值,表示更新视图时要满足所有相关视图和表的条件;local表示更新视图时满足该视图本身定义的条件即可。
  该语句要求具有针对视图的create view权限,以及针对由select语句选择的每一列上的某些权限。对于在select语句中其他地方使用的列,必须具有select权限。如果还有or replace子句,必须在视图上具有drop权限。

默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

2.2在单表上创建视图

create view view_t as select quantity,price,quantity*price from t;
#指定视图字段的名称
create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;

2.3 在多表上创建视图
 

create view stu_glass(id,name,glass) as select student.s_id,student.name,stu_info.glass from student,stu_info where student.s_id=stu_info.s_id

三、查看视图

    3.1 describe语句查看视图基本信息
         descibe 视图

     3.2 show table status 语句查看视图基本信息
    show table status like '视图名'

   3.3 show create view语句查看视图详细信息
       show create view 视图名

   3.4在views表中查看视图详细信息
   在MySQL中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有视图的详细信息,查询语句如下:select * from information_schema.view [where_statement];

四 、修改视图

 4.1  create or replace view语句修改视图,修改视图的语句和创建视图的语句是完全一样的。当视图已经存在的时候,修改语句对视图进行修改;当视图不存在时,创建视图。

#修改视图view_t
create or replace view view_t as select * from t;

4.2 alter语句修改视图
    alter [algorithm={undefined|meger|temptable}]
          view view_name [(column_list)]  as select_statement
      [with[cascaded|local] check option]

#alert语句修改视图view_t
alter view view_t as select quantity from t;

五、更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟的表,其中没有数据。通过视图更新的时候都是转到基础表上进行更新的,如果对视图增加或删除记录,实际上是对基本表增加或者删除记录。视图更新的3种方法:insert(基表)、update(视图)和delete(视图)。

当视图中包含有如下内容时,视图的更新操作将不能被执行:

  • 视图中不包含基表中被定义为非空的列
  • 在定义视图的select语句后的字段列表中使用了数学表达式
  • 在定义视图的select语句后的字段列表中使用聚合函数
  • 在定义视图的select语句中使用了distinct,union,top,group by 或having 子句

六、删除视图
   drop view  [if exists] view_name[,view_name]...  [restrict|cascade]

  其中,view_name是要删除的视图名称,可以添加多个需要删除的视图名称,各个名称之间使用逗号隔开。删除视图必须拥有drop权限。

#删除stu_glass视图
drop view if exists stu_glass;

视图和表的区别和联系

区别:1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值