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

34次阅读
没有评论

共计 2608 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要讲解了“MySQL 数据库视图的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“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]

参数说明:

algorithm:表示视图选择的算法,可选;

view_name:创建的视图名称;

column_list:指定视图中各个属性的名词,默认情况下与 SELECT 语句中查询的属性相同;

select_statement:表示一个完整的查询语句,将查询记录导入视图中;

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

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

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

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

SELECT cname
FROM (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) tt
WHERE item = 1;

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

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

视图解决方式代码:

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

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

参考代码及结果:

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

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2608字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)