第六课:MySQL 视图

一、视图

视图是从一个或多个表或者视图中导出的表,也包含一系列带有名称的数据列若干条数据行

视图不同于数据库真实存在的表:

l 视图是一张虚拟表,其结构和数据建立在对数据库中真实表的查询基础上

l 视图的内容由存储在数据库中进行查询操作的SQL语句来定义,其列数据和行数据均来自于定义视图的查询引用的真实表(基础表、基表或源表)或者是基于真实表的计算值,这些数据是引用视图时动态生成

l 视图不是以数据集的形式存储在数据库中,视图对应的数据实际是存储在视图所引用的真实表中

l 视图是用来查看存储在别处地的数据的一种设施,其本身不存储数据

视图一经定义,可以同表一样对其查询以及受限的修改、删除和更新等操作。

视图具备的一些优点:

* 集中分散数据

简化查询语句:视图的查询定义就是模式与外模式之间的映射关系,依据数据外模式编写的应用程序可以不用修改,从而保证数据与程序的逻辑独立性

重用SQL语句

保护数据安全:通过视图,用户可以被限制在数据的不同字集上,使用权可被限制在基表的行的字集上

共享所需数据

更改数据格式

二、创建视图

基本语法结构:

create [or replace]

view view_name [(column_list)]

as select_statement

[with [cascaded | local] check option];

or replace:用于替换数据库中已有的同名视图,需要在该视图上具备drop权限

view_name:指定视图名称。视图名称在数据库中必须唯一,不能与其他表或视图同名

column_list:为视图中的每个列指定明确的名称

select_statement:用于指定创建视图的select语句,这个select语句给出了视图的定义,可用于查询多个基础表或源视图。对于select语句的指定存在着一定的限制:

定义视图的用户需要授权:create view的权限、可以操作视图所涉及的基础表或其他视图的相关权限

select语句不能包含from子句中的子查询

select语句不能引用系统变量或用户变量

select语句不能引用预处理语句参数

在select语句中引用的表或视图必须存在,创建完视图后可以删除试图定义中引用的基础表或源视图。查看视图定义是否存在这类问题,可以用check table语句

select语句所引用的不是当前数据库的基础表或源视图时,需要在该表或视图前加数据库的名称作为限制前缀

在由select语句构造的视图定义中,允许使用order by子句。但若从特定视图进行选择,而该视图已经使用了自己的order by语句,则视图定义中的order by子句将被忽略

对于select语句中的其他选项或子句,若创建的视图中也包含这些选项,则语句执行效果未定义

with check option:指定在可更新视图上进行的修改都需要符合select_statement中所指定的限制条件,以确保数据修改后仍可以通过视图看到修改后的数据。当视图是根据另一个视图定义时,with check option给出的两个参数:cascaded | local,决定检查测试的范围,cascaded为默认,会对所有视图进行检查;local只对定义的视图进行检查

三、删除视图

基本语法结构:

drop view [if exists]

view_name [,view_name] ...;

view_name:指定要删除的视图的名称,一次可以删除多个视图,要拥有每个视图的drop权限

if exists:用于防止因删除的视图不存在而报错

四、修改视图定义

基本语法结构:

alter view view_name [(column_list)]

as select_statement

[with [cascaded | local] check option];

对于alter view语句使用,需要具有针对视图的create view和drop以及由select语句选择的每一列上的某些权限

五、查看视图定义

基本语法结构:

show create view view_name;

六、更新视图数据

视图中包含以下任何一种SQL语句结构,该视图都不可更新:

聚合函数

distinct关键字

group by子句

order by子句

having子句

union运算符

位于选择列表中的子查询

from子句中包含多个表

select语句中引用不可更新视图

where子句中的子查询,引用from子句中的表

1、使用insert语句通过视图对基础表插入数据

insert into view_name

values ( value_list1),( value_list2),...,( value_listn);

2、使用update语句通过视图修改基础表的数据

update view_name

set column1 = value1,column2= value2,...,columnn = valuen;

3、使用delete语句通过视图删除基础表的数据

delete from view_name [where <conditions>];

对于依赖多个基础表的视图,不能使用delete语句

七、查询视图数据

查询视图与查询数据库中的表一样,是对视图使用最多的一种操作。视图用于查询检索,主要应用在:

利用视图简化复杂的表连接

使用视图重新格式化检索出的数据

使用视图过滤不想要的数据

select tb_name

from view_name

[where <conditions>];

八、对视图的进一步说明

在MySQL中使用视图还需要注意:

l 创建视图必须具备足够的访问权限

l 对于可以创建的视图数目没有限制

l 视图可以嵌套(可利用从其他视图中检索数据的查询来构造一个视图)

l order by子句可以用在视图中。但若从该视图检索数据的select语句中含有order by子句,则该视图定义中的order by子句将被覆盖

l 视图不能索引也不能有关联的触发器和默认值

l 试图可以和表一起使用

l 视图不包含数据,因此每次使用视图时必须处理查询执行时所需的任何一个检索操作。在部署使用大量视图的应用前,应该进行性能测试

陈双义博客

打赏 支付宝打赏 微信打赏
本文标题:第六课:MySQL 视图
本文链接:https://www.chenshuangyi.com/post/558.html
作者授权:除特别说明外,本文由 陈双义 原创编译并授权 陈双义博客 刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。协议见页脚-知识共享许可协议。

为您推荐

  第十二课:MySQL 数据库的应用编程

第十二课:MySQL 数据库的应用编程

一、使用PHP进行MySQL数据库应用编程1、建立与MySQL数据库服务器的连接1.1、使用函数mysql_connec...

2019-03-21 标签:MySQL数据库软件测试
第十一课:MySQL 数据库备份与恢复

第十一课:MySQL 数据库备份与恢复

一、MySQL数据库备份与恢复1、使用SQL语句备份和恢复表数据1.1、select into...outfile语句导...

2019-03-21 标签:MySQL数据库软件测试
第十课:MySQL 访问控制与安全管理

第十课:MySQL 访问控制与安全管理

一、用户账户管理1、创建账户基本语法结构:create user user_specification[,us...

2019-03-20 标签:MySQL数据库软件测试
第九课:MySQL 存储过程和存储函数

第九课:MySQL 存储过程和存储函数

一、存储过程存储过程是一组为了完成某特定功能的SQL语句集。一个存储过程是一个可编程的函数,同时可以看做是在数据库编程中...

2019-03-18 标签:MySQL数据库软件测试
第八课:MySQL 事件

第八课:MySQL 事件

一、事件事件和触发器相似,都是在某些事情发生的时候启动,事件也叫作临时触发器事件基于特定时间周期触发来执行某些任务,而触...

2019-03-05 标签:MySQL数据库软件测试

发表评论

百度一下
百度搜索
百度广告
站点信息
  • 文章总数:648
  • 页面总数:10
  • 分类总数:12
  • 标签总数:1036
  • 评论总数:145
  • 浏览总数:277605

当前非电脑浏览器正常宽度,请使用移动设备访问本站!