找实习面试问到视图了
面试官问:你是怎么理解视图的?
答得不全,回来补!!
目录
视图概述
视图是从一个或多个数据表中导出来的虚拟存在的表,本身是不记录数据的,视图的创建是建立在已有表(基表)的基础之上的,也就是说,创建的表结构和表数据记录都是依赖于基表。视图不仅能帮助我们查看存放在基表的数据,我们也可以像操作基表一样对数据进行查询,添加,更新,修改和删除操作,对视图的增,删,改会影响到对于的基表,但是创建视图和删除视图不会影响到基表
视图使用场景
我们希望的是不同部门,不同级别的员工所拥有的权限是不同的,进而操作所得到的结果也是不一样的。视图一方面可以让我们只使用表中的一部分数据,而不是使用表中的所有数据;另一方面也可以针对不同的用户制定不同的查询视图。
视图创建和删除注意
想要明确地指定在某个数据库中创建视图,在创建时应将名称指定数据库名.视图名
。不然默认视图保存在当前数据库
在进行SHOW TABLES
操作时,查询到的结果中不仅包含了该数据库中的数据表,还包含了已经创建好的视图。
4,在同一个数据库中,新创建视图的视图名称不能与已经存在的表名称相同,如果相同,会创建失败。
5,当一个视图创建完成后,MySQL就会在数据库目录上创建一个名为视图名.frm
的文件。
单表视图创建
注意如果不添加with cascaded对视图添加视图时也会对基表操作的
CREATE VIEW view_name [column_list] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION];
多表视图创建
本质是查询语句涉及多张表
查看视图
desc view_name
修改视图的定义
例如当基本表的某些字段发生变化时,视图必须修改后才能正常使用
在MySQL中,修改视图方式有2种,分别为替换已有视图和使用alter view语句
替换
修改
删除视图
当视图不再需要时,可以将其删除,在删除视图时不会删除基本表中的数据。
删除单个视图或多个视图都是通过使用DROP VIEW
语句,基本语法如下:
#删除单个视图
DROP VIEW [IF EXISTS] view_name;#删除多个视图
DROP VIEW [IF EXISTS] view_name,view_name..
对视图操作
添加视图数据
通过视图向基本表添加数据时,可以使用INSERT INTO
语句完成数据的添加操作。
INSERT INTO view_name VALUES(column_value,...);
在这个单表视图中添加数据,对应基表的数据也会变化。
如果在视图中添加的数据与视图创建条件相符合(视图可能是单表可能是多表),则添加的数据就可以在视图中显示出来,如果不符合就不可以在视图中显示。但不管在视图添加数据是否符合视图创建条件,只要在创建视图时没有加上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 条件表达式];
修改数据的操作本质为:当对视图数据进行修改数据操作时,就相当于对基本表数据进行修改数据操作。如果修改后数据不符合视图的插件条件就不会在视图中显示,但这条数据还是存在于基表中并完成了对应的修改操作,只是不在视图中显示罢了
删除视图数据
通过视图删除基本表数据时,使用DELETE
语句。
DELETE FROM view_name [WHERE 条件表达式];
删除数据本质:当对视图数据进行删除时,相当于对基本表数据进行删除
扩展
对视图数据增删改可能失败的情况:
所操作的视图定义在多个数据表上
未满足视图基本表对字段的约束条件
在定义的select语句后的字段列表种使用数字表达式或者聚合函数
在定义的select语句种使用了distinct,union,top,group y或者having子句
级联检查
创建视图时可以使用cascaded进行级联检查,这样系统默认操作数据时满足所有有关视图和表的定义才能操作数据成功,否则失败
操作说明:首先依赖student数据表创建满足成绩大于92的学生信息的视图view_1
,无检查条件;再依赖于view_1视图创建满足成绩低于96的学生信息的视图view_2
,存在检查条件CASCADED
;然后在对视图view_2添加符合成绩在92到96之间的数据记录,数据记录添加成功;最后在往视图view_2添加不符合成绩在92到96之间的数据记录,数据记录添加失败,系统报错。
非级联检查
创建视图时可以使用local进行非级联检查,操作数据时只需要安祖改视图本身定义的条件,,如不满足,操作数据失败
视图优点&缺点
优点:
数据安全,减少数据冗余,简化查询语句,逻辑数据独立性,能够分解负载的查询逻辑
缺点:
性能较低,维护复杂,修改限制(当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,还挺方便的,但对于比较复杂的视图,可能就不能进行修改了。)