一、MySQL视图是什么?
视图可以理解为虚拟的表,它本身不存储任何实际的数据,而是一个基于一个或多个基表(真实表)的查询语句的封装。你可以像操作普通表一样查询视图,但视图展示的数据其实是实时从基表中计算出来的。
打个比方:基表是仓库里所有的商品明细(包含价格、库存、分类、供应商等),而视图就像是一份“热销商品清单”——这份清单不单独存放商品数据,只是从仓库明细中筛选出“销量>100”的商品,每次查看清单时,都会实时从仓库明细里取最新数据。
二、视图的核心用法
1. 创建视图
基本语法:
CREATE VIEW 视图名 AS
SELECT 字段1, 字段2,...
FROM 基表1 [JOIN 基表2 ON 关联条件]
[WHERE 筛选条件];
示例:
假设有一个真实表 students(学生表),结构如下:
| id | name | age | gender | score |
|---|---|---|---|---|
| 1 | 张三 | 18 | 男 | 90 |
| 2 | 李四 | 19 | 女 | 85 |
| 3 | 王五 | 18 | 男 | 60 |
创建一个“男生成绩视图”:
-- 创建视图:只展示男生的id、姓名、成绩
CREATE VIEW male_students_score AS
SELECT id, name, score
FROM students
WHERE gender = '男';
2. 使用视图
视图创建后,查询方式和普通表完全一致:
-- 查询视图(和查普通表一样)
SELECT * FROM male_students_score;
执行结果:
| id | name | score |
|---|---|---|
| 1 | 张三 | 90 |
| 3 | 王五 | 60 |
3. 修改/删除视图
-- 修改视图(替换原有视图)
CREATE OR REPLACE VIEW male_students_score AS
SELECT id, name, score, age
FROM students
WHERE gender = '男';
-- 删除视图
DROP VIEW IF EXISTS male_students_score;
三、视图的核心作用
- 简化复杂查询:如果有一个需要多表关联、多层筛选的复杂查询,把它封装成视图后,后续只需查询视图即可,无需重复写复杂SQL。
- 数据安全与权限控制:可以给不同用户开放不同视图的权限,比如只让财务看“薪资视图”(仅包含姓名、薪资字段),而不让其看到员工的手机号、地址等敏感信息。
- 数据抽象:隐藏基表的结构细节,用户只需关注自己需要的字段,无需了解底层表的关联逻辑。
四、注意事项
- 视图不存储数据:每次查询视图,都会重新执行底层的SELECT语句,基表数据变化后,视图结果也会实时更新。
- 部分视图支持更新(INSERT/UPDATE/DELETE):但有严格限制(比如视图不能包含GROUP BY、DISTINCT、聚合函数等),大部分场景下视图仅用于查询。
总结
- MySQL视图是基于基表查询语句的虚拟表,不存储实际数据,仅封装查询逻辑。
- 核心作用是简化复杂查询、控制数据权限、抽象数据结构。
- 使用方式和普通表一致,但更新操作有严格限制,主要用于查询场景。

5万+

被折叠的 条评论
为什么被折叠?



