MySQL 视图
MySQL 视图
视图是一种“虚拟表”,其结构和数据由查询语句定义,本身不存储实际数据,仅在查询时动态从基表(定义视图的原始表)中获取数据。视图主要用于简化复杂查询、控制数据访问权限、屏蔽表结构变化。
视图的核心作用
- 简化复杂查询:将多表关联、聚合计算的复杂 SQL 封装为视图,查询时直接调用视图(如
SELECT * FROM 视图名); - 数据安全:通过视图只暴露部分字段(如隐藏用户表的
password字段),或只暴露部分行(如只显示本部门员工数据); - 屏蔽表结构变化:若基表字段名修改,只需修改视图的定义,无需修改依赖该视图的应用代码。
视图的语法操作
-- 1. 创建视图
CREATE VIEW 视图名 AS
-- 视图的定义查询(可包含多表关联、聚合、条件过滤等)
SELECT
u.id,
u.username,
d.name AS dept_name -- 关联部门表,显示部门名称
FROM user u
LEFT JOIN dept d ON u.dept_id = d.id
WHERE u.status = 1; -- 只显示状态为1(正常)的用户
-- 2. 查询视图(与查询普通表一致)
SELECT * FROM 视图名 WHERE dept_name = '技术部'; -- 筛选技术部用户
-- 3. 修改视图(两种方式)
-- 方式1:CREATE OR REPLACE(若视图存在则修改,不存在则创建)
CREATE OR REPLACE VIEW 视图名 AS
SELECT u.id, u.username, u.age FROM user u WHERE u.status = 1;
-- 方式2:ALTER VIEW
ALTER VIEW 视图名 AS
SELECT u.id, u.username, u.age FROM user u WHERE u.status = 1;
-- 4. 删除视图
DROP VIEW IF EXISTS 视图名;
-- 5. 查看视图定义(所有视图存储在 information_schema.VIEWS 表中)
SELECT VIEW_DEFINITION FROM information_schema.VIEWS
WHERE TABLE_NAME = '视图名';
视图的注意事项
- 可更新性:并非所有视图都支持 INSERT/UPDATE/DELETE,若视图包含以下内容,则不可更新:
- 聚合函数(SUM/AVG/MAX 等);
- DISTINCT(去重);
- GROUP BY/HAVING(分组);
- UNION(联合查询);
- 性能:视图本身不缓存数据,每次查询视图都会重新执行定义的 SQL,若基表数据量大或 SQL 复杂,可能影响性能;
- 权限:创建视图需
CREATE VIEW权限,查询视图需基表的SELECT权限,修改/删除视图需DROP VIEW权限。

浙公网安备 33010602011771号