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 权限。
posted @ 2025-10-29 16:11  Jing61  阅读(9)  评论(0)    收藏  举报