返回顶部
首页 > 资讯 > 数据库 >【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
  • 472
分享到

【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)

数据库mysql学习开发语言后端 2023-09-01 16:09:41 472人浏览 安东尼
摘要

💁 个人主页:黄小黄的博客主页 ❤️ 支持我:👍 点赞 🌷 收藏 🤘关注 🎏 格言:一步一个脚印才能承接所谓的幸运

💁 个人主页:黄小黄的博客主页
❤️ 支持我:👍 点赞 🌷 收藏 🤘关注
🎏 格言:一步一个脚印才能承接所谓的幸运

本文来自专栏:MySQL8.0学习笔记
本文参考视频:MySQL数据库全套教程
欢迎点击支持订阅专栏 ❤️
在这里插入图片描述


文章目录


1 视图的介绍与作用

🆔 视图的介绍:

  • 视图 view 是一个虚拟表,非真实存在,其 本质是根据sql语句获取动态的数据集,并为其命名, 用户使用时只需要使用视图名称即可获取结果集,并可以将其当作表来使用。
  • 数据库中只存放了视图的定义,而并没有存放视图中的数据。 数据还存在于原来的数据表中。
  • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此, 视图中的数据是依赖于原来表中数据的。 当表的数据发生改变,视图中的数据也会随之改变。

🦁 视图的作用:

  • 简化代码, 我们可以把重复使用的查询封装成视图重复使用,同时可以 使复杂的查询易于理解;
  • 更加安全 比如,如果有一张表中有很多数据,很多信息不希望被其他人看到,这时就可以使用到视图,对不同的用户使用不同的视图。

2 视图的创建

🐰 创建视图的语法如下:

create [or replace] [alGorithm = {undefined | merge | temptable}]view view_name [(column_list)]as select_statement[with [cascaded | local] check option]

🍊 参数说明:

  1. algorithm: 表示视图选择的算法,可选;
  2. view_name: 创建的视图名称;
  3. column_list: 指定视图中各个属性的名词,默认情况下与SELECT语句中查询的属性相同;
  4. select_statement: 表示一个完整的查询语句,将查询记录导入视图中;
  5. [with [cascaded | local] check option]: 表示更新视图时要保证该视图在权限范围之内。

3 视图的修改

修改视图是指修改数据库中已存在的表的定义。当基本表中的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间的一致。

🅰️ 语法格式:

alter view 视图名 as select语句;

4 视图的更新

并不是所有的视图都可以更新。可以在UPDATE、DELETE或INSERT等语句中使用视图,以更新基本表的内容。对于可更新的视图,在视图中的行和基本表中的行之间必须具有一对一的关系,如果视图包含下述结构中的任何一种,则该视图不可更新:

  1. 聚合函数(SUM()、MIN()、MAX()等);
  2. DISTINCT;
  3. HAVING;
  4. UNION或者UNION ALL;
  5. 位于选择列表中的子查询;
  6. JOIN;
  7. FROM子句中的不可更新视图;
  8. WHERE子句中的子查询,引用FROM子句中的表;
  9. 仅使用文字值(在该情况下,没有要更新的基本表)。

🐴 注意:
视图中虽然可以更新数据,但是有很多限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。
当真实表中修改了某个存在视图中的字段时,视图需要更新,否则该视图就会变成无效视图!


5 视图的重命名与删除

重命名视图:

rename table 视图名 to 新视图名;

删除视图:

drop view if exists 视图名;

删除视图时,只删除了视图的定义,而并不会删除真实表中的数据

如果想同时删除多个视图,则使用下面的语法格式:

drop view if exists 视图名1, 视图名2, 视图名3...;

6 视图的练习

6.1 数据准备

在进行练习时可以先根据下面代码创建用于练习的两个基本表:

create table college(    cno   int         null,    cname varchar(20) null);
create table student(    sid     int         null,    name    varchar(20) null,    gender  varchar(20) null,    age     int         null,    birth   date        null,    address varchar(20) null,    score   double      null);

两表的基本数据如下图所示:
在这里插入图片描述

6.2 查询平均分最高的学校名称

结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:

SELECT cnameFROM (SELECT cname, rank() over (order by avg_score desc ) item      FROM (SELECT cname, avg(score) avg_score            FROM student                     JOIN college ON sid = cno            GROUP BY cname) t) ttWHERE item = 1;

在上述代码中,先将student 与 college两表关联,将关联的查询作为子表,并根据子表进行平均数的排序,平均数序号为1的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
在这里插入图片描述

这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图

🐰 视图解决方式代码:

-- 1 视图一,连接两表并计算平均数CREATE VIEW t_view ASSELECT cname, avg(score) avg_scoreFROM student         JOIN college ON sid = cnoGROUP BY cname;-- 2 视图二,利用视图一对平均分数进行排序标号CREATE VIEW tt_view ASSELECT cname, rank() over (order by avg_score desc ) itemFROM (t_view);-- 3 利用视图查询SELECT cnameFROM (tt_view)WHERE item = 1;

在创建完视图后,如果想要查询平均分前三名学校,则方便很多,创建好的视图可以直接使用!

🐱 参考代码及结果:

SELECT cnameFROM (tt_view)WHERE item = 1   OR item = 2   OR item = 3;

在这里插入图片描述


写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
在这里插入图片描述

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_60353039/article/details/125586721

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)

本文链接: https://lsjlt.com/news/388943.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作