MySQL数据库视图的作用是什么

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等语句中使用视图,以更新基本表的内容。对于可更新的视图,在视图中的行和基本表中的行之间必须具有一对一的关系,如果视图包含下述结构中的任何一种,则该视图不可更新:

  • 聚合函数(SUM()、MIN()、MAX()等);

  • DISTINCT;

  • HAVING;

  • UNION或者UNION ALL;

  • 位于选择列表中的子查询;

  • JOIN;

  • FROM子句中的不可更新视图;

  • WHERE子句中的子查询,引用FROM子句中的表;

  • 仅使用文字值(在该情况下,没有要更新的基本表)。

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


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);

两表的基本数据如下图所示:

MySQL数据库视图的作用是什么

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的平均分数较高,再以此为子表进行子查询,查询出了平均分较高的学校。具体结果如下:
MySQL数据库视图的作用是什么

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

视图解决方式代码:

-- 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;

MySQL数据库视图的作用是什么

感谢各位的阅读,以上就是“MySQL数据库视图的作用是什么”的内容了,经过本文的学习后,相信大家对MySQL数据库视图的作用是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

文章标题:MySQL数据库视图的作用是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25554

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月15日 下午11:29
下一篇 2022年9月15日 下午11:31

相关推荐

  • 图片怎么转换成word文档

    图片转换成word文档教程: 1、首先下载一个wps并打开。 2、打开后,点击应用中心里的“更多” 3、如果是办公助手,那就点击左下角的图标,如图所示。 4、打开后,在其中找到“图片转文字”工具。 5、随后点击顶部的“添加图片” 6、添加完成后,选择“转化为文档”就可以了。 关于“图片怎么转换成wo…

    2022年9月1日
    91500
  • cad字体如何添加进去

    cad字体添加进去的方法 1、首先右键CAD的图标,找到属性点击。 2、然后切换到快捷方式栏目。 3、然后打开文件所在的位置。 4、找到Fonts文件夹。 5、Fonts文件夹就是CAD的字体库了; 如果需要添加字体,只需要把下载下来的字体文件复制进这个文件夹就可以了。 到此,相信大家对“cad字体…

    2022年9月15日
    1.4K00
  • word字体放大后上半部分缺失怎么解决

    解决方法 1、首先我们把缺失的文字框选出来。 2、鼠标右键点击之后选择段落。 3、然后选择行距,这里点击单倍行距。然后点击确定。 4、这样就能看见字体恢复了正常。 读到这里,这篇“word字体放大后上半部分缺失怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,…

    2022年9月11日
    81300
  • 怎么用纯CSS实现表格响应式布局

    布局效果: 简单解析一下效果: 在屏幕视口较为宽时,表现为一个整体 Table 的样式 而当屏幕视口宽度较小时,原 Table 的每一行数据单独拆分为一个 Table 进行展示 很有意思的一个响应式布局,让信息在小屏幕下得到了一种不错的展示。 那么,仅仅使用 CSS 的话,能否实现这样一个布局呢?答…

    2022年9月10日
    81600
  • Mysql中的Enum数据类型实例分析

    Mysql中的enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定。对1至255个成员的枚举需要1个字节存储;对于255至65535个成员,需要2个字节存储。非常多允许有65535个成员。 enum底层存的是十进制整数,严格按顺序1,2,3,4,5…排…

    2022年9月13日
    89800
  • mysql在linux中2003错误如何解决

    解决方法:1、修改“my.cnf”文件,在“bind-address = 127.0.0.1”的前面添加“#”将其注释掉;2、在文件中添加“skip-external-lockingskip-name-resolve”;3、利用“service mysql restart”重新启动mysql服务即可…

    2022年9月18日
    50100
  • Mysql中锁的使用场景是什么

    Mysql中锁的使用场景主要有:常见锁类型、Mysql引擎介绍、常用引擎间的区别、共享锁与排他锁、排他锁的实际应用、共享锁的实际应用、死锁的发生、另一种发生死锁的情景、死锁的解决方式、意向锁和计划锁、乐观锁和悲观锁。 一、常见锁类型 表级锁,锁定整张表 页级锁,锁定一页 行级锁,锁定一行 共享锁,也…

    2022年6月29日
    72600
  • mysql函数的作用有哪些

    mysql函数的作用是用来实现某些功能运算和完成各种特定操作;使用函数能够允许标准组件式编程,提高了SQL语句的重用性、共享性和可移植性,可以减少重复编写程序段的工作量,提高程序的可读性,提高程序编译和运行效率,产生质量较高的目标代码。 本教程操作环境:windows10系统、mysql8.0.22…

    2022年9月6日
    67300
  • 怎么用vue实现动态路由

    1、什么是动态路由? 动态路由,动态即不是写死的,是可变的。我们可以根据自己不同的需求加载不同的路由,做到不同的实现及页面的渲染。动态的路由存储可分为两种,一种是将路由存储到前端。另一种则是将路由存储到数据库。动态路由的使用一般结合角色权限控制一起使用。 总结: 1)路由可变,不是写死的,动态加载 …

    2022年9月15日
    91900
  • ppt中分数如何打出来

    分数打出来ppt方法: 方法一: 名列前茅步,先在想要输入分数的地方“插入”一个“文本框” 第二步,在其中输入数字,再按下回车,然后按下“shift+——”键 第三步,输入完成再按回车并输入数字就能形成一个分数了。 方法二: 名列前茅步,点击“插入”下的“公式”按钮。 第二步,点击第二行第二列的按钮…

    2022年8月29日
    2.8K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部