1.介绍
1.1.什么是视图
MySQL中的视图是一种虚拟表,它并不存储实际的数据,而是存储了一条SELECT查询语句的结果集。
视图可以简化复杂的查询操作,保护数据,并且可以使数据库结构更加清晰易懂。
1.2.视图的作用
- 简化查询:视图可以将复杂的查询包装起来,使得最终用户只需要执行简单的查询即可获取所需的数据。
- 保护数据:通过定义视图,可以向用户提供特定的数据子集,而隐藏表中的其他列或行,从而达到保护敏感数据的目的。
- 逻辑数据聚合:视图可以将来自多个表的数据进行逻辑上的聚合,使得用户可以从一个视图中获取多个表中的数据。
- 增强安全性:视图可以实现行级安全控制,通过定义视图来限制用户只能访问某些特定的数据行。
2.操作
2.1.创建视图
创建视图的基本语法如下:
CREATE VIEW view_name (column_list)
AS
select_statement;
其中:
view_name
是要创建的视图的名字。column_list
可选,用于指定视图中的列名。select_statement
是定义视图的SELECT查询语句。
-- 根据单一表创建, 创建时指定列名
create view stu_info ( id, name, sex, info ) as
select stu_id, stu_name, stu_sex, stu_info
from student ;
-- 根据多表创建, 使用默认字段
create view stu_team_view as
select stu_id, stu_name, team_title
from student s left join team t on s.team_id = t.team_id;
2.2.查看视图
-- 查看表的结构 , 显示表中各列的信息,包括列名、数据类型、是否允许为空等
desc stu_info;
-- 查看视图是如何定义的,包括视图所基于的SELECT语句。
show create view stu_info;
-- 查看表的基本信息和统计信息, 显示表的状态信息,包括表名、引擎、行数、数据大小等
show table status like 'stu_info';
2.3.修改视图
-- 例题1:增加字段
alter view stu_info(id, name,sex, birth, info) as
select stu_id, stu_name,stu_sex, stu_birth, stu_info
from student ;
-- 例题2:重新定义
alter view stu_info(id, name, info) as
select stu_id, stu_name, stu_info
from student where stu_info is not null ;
2.4.查询视图
使用视图就像使用普通表一样
select * from stu_info;
select stu_id, stu_name, team_title from stu_team_view;
2.5.更新视图
视图也可以更新,但有一些限制:
- 基础表:视图必须基于单个表或多个表的联接。
- 不可更新的视图:如果视图包含了聚合函数、DISTINCT、JOIN、GROUP BY、HAVING等,那么这个视图是不可更新的。
update stu_info
set info = '充满好奇'
where id = 4;
注意 : 这个修改会直接影响到表中数据
2.6.删除视图
删除视图也很简单,使用DROP VIEW
语句:
drop view stu_info;
3.视图的局限性
虽然视图提供了很多便利,但也存在一些局限性:
- 性能:视图实际上并不存储数据,而是每次查询时重新计算结果集,这可能导致性能问题。
- 索引:视图本身不能拥有索引,因此在大型数据集上使用视图时,查询速度可能会受到影响。
- 可更新性:不是所有的视图都能被更新,特别是那些包含聚合函数或其他复杂查询的视图。