MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。
视图并不同于数据表,它们的区别在于以下几点:
在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。
视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。
通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
要注意区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。
使用视图的时候,还应该注意以下几点:
语法格式如下:
CREATE VIEW <视图名> AS <SELECT语句>
语法说明如下。
<视图名>
:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。<SELECT语句>
:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。对于创建视图中的 SELECT 语句的指定存在以下限制:
视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 CHECK TABLE 语句检查视图定义是否存在这类问题。
视图定义中允许使用 ORDER BY 语句,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。
视图定义中不能引用 TEMPORARY 表(临时表),不能创建 TEMPORARY 视图。
WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件。
MySQL 可以在单个数据表上创建视图。
创建视图
查看student_db表中的数据
SELECT * FROM student_db;
在student_db表上创建一个view_student_db的视图
-- 创建视图
CREATE VIEW view_student_db AS SELECT * FROM student_db;
-- 查询视图
SELECT * FROM view_student_db;
默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
视图一经定义之后,就可以如同查询数据表一样,使用 SELECT 语句查询视图中的数据,语法和查询基础表的数据一样。
视图用于查询主要应用在以下几个方面:
-- 通过DESC 查看view_student_db的字段信息
DESC view_student_db;
执行结果:
注意:DESCRIBE 一般情况下可以简写成 DESC,输入这个命令的执行结果和输入 DESCRIBE 是一样的。
DESCRIBE view_student_db;
查看视图的详细信息
SHOW CREATE VIEW view_student_db;
执行效果:
展开Create View
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_student_db` AS select `student_db`.`id` AS `id`,`student_db`.`name` AS `name`,`student_db`.`age` AS `age`,`student_db`.`sex` AS `sex`,`student_db`.`city` AS `city`,`student_db`.`country` AS `country` from `student_db`
可以使用 ALTER VIEW 语句来对已有的视图进行修改。
语法格式如下:
ALTER VIEW <视图名> AS <SELECT语句>
语法说明如下:
<视图名>
:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。<SELECT 语句>
:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图使用 ALTER 语句修改视图
ALTER VIEW view_student_db AS SELECT id,name,age FROM student_db;
desc view_student_db
执行结果:
SELECT * FROM view_student_db;
执行结果:
使用 UPDATE 语句更新视图 view_students_db
把ID为1 的年龄更新为25
UPDATE view_student_db SET age=25 WHERE id=1;
SELECT * FROM view_student_db;
执行结果:
使用 DROP VIEW 语句来删除视图。
删除 view_students_db视图
DROP VIEW IF EXISTS view_student_db;
执行效果:
视图已删除
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。