Yihui’s Blog

什么是数据库的视图?

日期:2026-07-11
难度:中等
标签:#面试 #MySQL #视图 #数据库设计 #VIP

一句话答案

视图是由查询定义的虚拟表,通常只保存查询定义而不独立保存结果,可用于封装复杂 SQL、统一数据口径和限制用户可见的行列。

面试口语版

创建视图后,业务可以像查询表一样查询它,但普通 MySQL VIEW 不是物化视图,结果一般在访问时根据基表计算。它适合封装重复 JOIN、统一字段命名、兼容旧接口,或只暴露脱敏后的列。视图不是性能优化银弹,复杂视图嵌套可能让执行计划难读,底层表变化也可能使视图失效。部分简单单表视图可以更新,但包含聚合、DISTINCT、GROUP BY、UNION 等的视图通常不可更新。

原理拆解

CREATE VIEW active_users AS
SELECT id, name
FROM users
WHERE status = 'ACTIVE';

SELECT * FROM active_users WHERE id = 1;

关键细节

  • ALGORITHM 可为 MERGE、TEMPTABLE 或 UNDEFINED,影响查询合并与可更新性。
  • SQL SECURITY DEFINER/INVOKER 决定按定义者还是调用者权限执行,需防止权限扩大。
  • MySQL 原生普通视图不缓存结果;需要物化效果时通常用汇总表和定时/增量刷新。

面试官追问

  1. 视图和表的区别?
  2. 哪些视图可以更新?
  3. 视图能提高查询性能吗?
  4. DEFINER 有什么安全风险?

高分补充

视图更适合做稳定数据接口和权限边界,而不是掩盖不可控的复杂 SQL。

学习清单

  • 记住虚拟表、非物化、可更新条件和安全上下文。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文