MySQL——视图的介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL——视图的介绍

1.视图的介绍

首先我们需要直到视图是什么???


答:视图是从一个表或者几个表(或视图)导出的表。它于基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询的出的数据也就随之改变。



2.视图的作用

①视图能简化用户的操作。

②视图能以多种角度看待同一数据。

③视图对重构数据库提供了一定程度的逻辑独立性。

④视图能够对机密数据提供安全保护。

⑤适当利用视图可以更清晰地表达查询。

3.定义视图

①建立视图

视图格式

SQL语言用create view 命令建立视图,其一般格式为:


create view<视图名>[(<列名>[,<列名>]...)]
as <子查询>
with check option;

其中,子查询可以是任意的select语句,是否可以含有 order by 子句和 distinct短语,则取决于具体的系统实现。


with check option 表示对视图进行updat,insert,delete操作时要保证更新,插入或删除的行满足视图定义的谓词条件(即子查询中的条件表达式)。


注意:组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。


以下三种情况必须明确指定组成视图的所有列名:


某个目标列是聚集函数或列表达式

多表连接时选出了几个同名列作为视图的字段

需要在视图中为某个列启用新的更合适的名字


关系数据库管理系统执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。



列子集视图:

若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,我们称这类视图为行列子集视图


多种视图:

多个表的视图:


CREATE VIEW IS_S1(Sno,Sname,Grade)
        AS 
        SELECT Student.Sno,Sname,Grade
        FROM  Student,SC
        WHERE  Sdept= 'IS' AND
                       Student.Sno=SC.Sno AND
                       SC.Cno= '1';

基于视图的视图



CREATE VIEW IS_S2
        AS
        SELECT Sno,Sname,Grade
        FROM  IS_S1
        WHERE  Grade>=90;

带表达式的视图


CREATE  VIEW BT_S(Sno,Sname,Sbirth)
        AS 
        SELECT Sno,Sname,2014-Sage
        FROM  Student;

分组视图


CREAT  VIEW S_G(Sno,Gavg)
             AS  
             SELECT Sno,AVG(Grade)
             FROM  SC
             GROUP BY Sno;


②删除视图

语句的格式:


DROP  VIEW  <视图名>[CASCADE];

该语句从数据字典中删除指定的视图定义。


如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除。


删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除。


要删除IS_S1,需使用级联删除:            


DROP VIEW IS_S1 CASCADE;  


4.查询视图

视图定义后,用户就可以向对基本表一样的对视图经行查询了。


用户角度:查询视图与查询基本表相同



什么是视图消解??


我们用下面三句话直接概括!!!


进行有效性检查。

转换成等价的对基本表的查询。

执行修正后的查询。

[例]  在信息系学生的视图中找出年龄小于20岁的学生。


   

SELECT   Sno,Sage
       FROM      IS_Student
       WHERE   Sage<20;

视图消解转换后的查询语句为


SELECT  Sno,Sage       
 FROM  Student
 WHERE  Sdept= 'IS'  AND  Sage<20;

视图消解法的局限


有些情况下,视图消解法不能生成正确的查询。


在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩


SELECT *
FROM   S_G
WHERE  Gavg>=90;

S_G视图的子查询定义:


CREATE VIEW S_G (Sno,Gavg)
            AS 
SELECT  Sno,AVG(Grade)
FROM  SC
GROUP BY Sno;

错误:


SELECT Sno,AVG(Grade)
FROM     SC
WHERE  AVG(Grade)>=90
GROUP BY Sno;

正确:


SELECT  Sno,AVG(Grade)
FROM  SC
GROUP BY Sno
HAVING AVG(Grade)>=90;


5.更新视图

更新视图是指通过视图又 来插入(INSERT)、 删除(DELETE)和修改(UPDATE)数据。


由于视图是不不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。像查询视图那样,对视图的更新操作也是通过视图消解,转换为对基本表的更新操作。


为防止用户通过视图对数据进行增加、删除、修改时,有意无意地对不属于视图范围 内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。


[例]  将信息系学生视图IS_Student中学号”201215122”的学生姓名改为”刘辰”。


UPDATE  IS_Student
SET  Sname= '刘辰'
WHERE  Sno= ' 201215122 ';

转换后的语句:


UPDATE  Student
SET Sname= '刘辰'
WHERE Sno= ' 201215122 ' AND Sdept= 'IS';


更新视图的限制:


一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新


例:视图S_G为不可更新视图。


UPDATE  S_G
SET          Gavg=90
WHERE  Sno= '201215121';

这个对视图的更新无法转换成对基本表SC的更新



一般地,行列子集视图是可更新的。除行列子集视图外,有些视图理论上是可更新的,

但它们的确切特征还是尚待研究的课题。还有些视图从理论上就是不可更新的。


目前,各个关系数据库管理系统般都只允许对行列子集视图进行更新 而且各个系统对视图的更新还有更进一步的规定。由于各系统实现方法上的差异,这些规定也不尽相同。


例如DB2的规定:


若视图是由两个以上基本表导出的,则此视图不允许更新。

若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。

若视图的字段来自集函数,则此视图不允许更新。

若视图定义中含有GROUP BY子句,则此视图不允许更新。

若视图定义中含有DISTINCT短语,则此视图不允许更新。

若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。

 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
6月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
6月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
3月前
|
SQL 存储 关系型数据库
mysql-视图的定义和简单使用
这篇文章介绍了MySQL中视图的定义和简单使用方法,包括视图的创建规则和使用限制。通过一个实际的例子,展示了如何创建视图以及如何使用视图来简化复杂的SQL查询操作。
mysql-视图的定义和简单使用
|
3月前
|
存储 缓存 关系型数据库
MySQL 视图:数据库中的灵活利器
视图是数据库中的虚拟表,由一个或多个表的数据经筛选、聚合等操作生成。它不实际存储数据,而是动态从基础表中获取。视图可简化数据访问、增强安全性、提供数据独立性、实现可重用性并提高性能,是管理数据库数据的有效工具。
|
4月前
|
存储 关系型数据库 MySQL
|
5月前
|
SQL 安全 关系型数据库
MySQL创建视图(CREATE VIEW)13
【7月更文挑战第13天】创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
107 1
|
6月前
|
缓存 DataWorks 关系型数据库
DataWorks产品使用合集之如何抽取MySQL视图数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
108 4
|
5月前
|
存储 数据可视化 关系型数据库
深入理解 MySQL 视图
深入理解 MySQL 视图
49 2
|
6月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)

推荐镜像

更多
下一篇
DataWorks