MySQL视图

视图是数据库中的虚拟表,基于一个或多个基表,不存储数据。它用于权限控制,简化查询,提供数据安全性。创建和删除视图需要注意命名和影响范围,可以对视图进行增删改查操作,但某些情况下可能失败。视图的优点包括数据安全和逻辑独立性,缺点则是性能降低和维护复杂。
摘要由CSDN通过智能技术生成

找实习面试问到视图了

面试官问:你是怎么理解视图的?

答得不全,回来补!!

目录

视图概述

视图使用场景

视图创建和删除注意

对视图操作

扩展

视图优点&缺点


【MySQL进阶】MySQL视图详解

视图概述

视图是从一个或多个数据表中导出来的虚拟存在的表本身是不记录数据的,视图的创建是建立在已有表(基表)的基础之上的,也就是说,创建的表结构和表数据记录都是依赖于基表。视图不仅能帮助我们查看存放在基表的数据,我们也可以像操作基表一样对数据进行查询,添加,更新,修改和删除操作,对视图的增,删,改会影响到对于的基表,但是创建视图和删除视图不会影响到基表

视图使用场景

我们希望的是不同部门,不同级别的员工所拥有的权限是不同的,进而操作所得到的结果也是不一样的。视图一方面可以让我们只使用表中的一部分数据,而不是使用表中的所有数据;另一方面也可以针对不同的用户制定不同的查询视图。

视图创建和删除注意

想要明确地指定在某个数据库中创建视图,在创建时应将名称指定数据库名.视图名。不然默认视图保存在当前数据库

在进行SHOW TABLES操作时,查询到的结果中不仅包含了该数据库中的数据表,还包含了已经创建好的视图。

4,在同一个数据库中,新创建视图的视图名称不能与已经存在的表名称相同,如果相同,会创建失败。

5,当一个视图创建完成后,MySQL就会在数据库目录上创建一个名为视图名.frm的文件。

单表视图创建

注意如果不添加with cascaded对视图添加视图时也会对基表操作的

CREATE VIEW view_name [column_list] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION];

image-20230123181351677

 多表视图创建

本质是查询语句涉及多张表

image-20230123225717241

查看视图

desc  view_name

image-20230123232205022

修改视图的定义

例如当基本表的某些字段发生变化时,视图必须修改后才能正常使用

在MySQL中,修改视图方式有2种,分别为替换已有视图和使用alter view语句

替换

image-20230124093806880

 修改image-20230125153911337

删除视图

当视图不再需要时,可以将其删除,在删除视图时不会删除基本表中的数据。

删除单个视图或多个视图都是通过使用DROP VIEW语句,基本语法如下:

#删除单个视图
DROP VIEW [IF EXISTS] view_name;#删除多个视图
DROP VIEW [IF EXISTS] view_name,view_name..

image-20230125154937234

对视图操作

添加视图数据

通过视图向基本表添加数据时,可以使用INSERT INTO语句完成数据的添加操作。

INSERT INTO view_name VALUES(column_value,...);

image-20230125161034324 在这个单表视图中添加数据,对应基表的数据也会变化。

如果在视图中添加的数据与视图创建条件相符合(视图可能是单表可能是多表),则添加的数据就可以在视图中显示出来,如果不符合就不可以在视图中显示。但不管在视图添加数据是否符合视图创建条件,只要在创建视图时没有加上with cascaded check option或者with local check option检查条件,这个数据都会在基表中添加并显示

修改视图数据

通过视图修改基本表数据时,可以使用UPDATE语句完成数据的修改操作。

#修改单个字段数据:
UPDATE view_name SET column_name = column_value [WHERE 条件表达式];#修改多个字段数据:
UPDATE view_name SET column_name = column_value,column_name = column_value,... [WHERE 条件表达式];

image-20230125160821035

 修改数据的操作本质为:当对视图数据进行修改数据操作时,就相当于对基本表数据进行修改数据操作。如果修改后数据不符合视图的插件条件就不会在视图中显示,但这条数据还是存在于基表中并完成了对应的修改操作,只是不在视图中显示罢了

删除视图数据

通过视图删除基本表数据时,使用DELETE语句。

DELETE FROM view_name [WHERE 条件表达式]; 

 

 删除数据本质:当对视图数据进行删除时,相当于对基本表数据进行删除

扩展

对视图数据增删改可能失败的情况:

所操作的视图定义在多个数据表上

未满足视图基本表对字段的约束条件

在定义的select语句后的字段列表种使用数字表达式或者聚合函数

在定义的select语句种使用了distinct,union,top,group y或者having子句

级联检查

创建视图时可以使用cascaded进行级联检查,这样系统默认操作数据时满足所有有关视图和表的定义才能操作数据成功,否则失败

image-20230125213243092

 操作说明:首先依赖student数据表创建满足成绩大于92的学生信息的视图view_1,无检查条件;再依赖于view_1视图创建满足成绩低于96的学生信息的视图view_2,存在检查条件CASCADED;然后在对视图view_2添加符合成绩在92到96之间的数据记录,数据记录添加成功;最后在往视图view_2添加不符合成绩在92到96之间的数据记录,数据记录添加失败,系统报错。

非级联检查

创建视图时可以使用local进行非级联检查,操作数据时只需要安祖改视图本身定义的条件,,如不满足,操作数据失败

视图优点&缺点

优点:

数据安全,减少数据冗余,简化查询语句,逻辑数据独立性,能够分解负载的查询逻辑

缺点:

性能较低,维护复杂,修改限制(当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,还挺方便的,但对于比较复杂的视图,可能就不能进行修改了。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值