Node系列 · 数据库:视图

发布时间:2026/9/13 9:50:19

Node系列 · 数据库:视图 Node系列 · 数据库视图视图View是虚拟表——查询时按定义动态生成结果不存储实际数据。视图能简化复杂 JOIN、控制数据访问权限、抽象业务规则——但性能与可维护性有 trade-off需要明确何时该用、何时该拆。一、什么是视图视图是包装好的 SELECT 语句对外表现像一张表-- 创建一个视图学生 班级 综合成绩 CREATE VIEW v_student_score AS SELECT s.id AS student_id, s.name AS student_name, s.class_id AS class_id, c.name AS class_name, sc.subject, sc.score FROM student s JOIN class c ON c.id s.class_id JOIN score sc ON sc.student_id s.id;之后可以像查表一样查视图SELECT*FROMv_student_scoreWHEREclass_name高三一班;::: info视图不存储数据。每次查视图MySQL 都会执行它背后的 SELECT 语句。数据始终在原表里。:::二、视图的核心作用2.1 简化复杂查询把多表 JOIN、聚合、过滤封装成视图业务代码直接SELECT * FROM v_xxx-- 没有视图每次都要写完整 JOIN SELECT s.name, SUM(sc.score) AS total FROM student s JOIN score sc ON sc.student_id s.id WHERE s.class_id 3 GROUP BY s.id; -- 有视图业务代码只关心简单查询 SELECT student_name, SUM(score) AS total FROM v_student_score WHERE class_id 3 GROUP BY student_id;2.2 数据权限隔离让不同角色看到不同字段-- 给运营看的视图脱敏手机号 CREATE VIEW v_student_for_ops AS SELECT s.id, s.name, s.class_id, CONCAT(LEFT(s.phone, 3), ****, RIGHT(s.phone, 4)) AS phone_masked FROM student s; -- 运营账号只有 v_student_for_ops 的权限看不到真实手机号2.3 抽象业务规则“近 30 天活跃用户” 这种业务口径经常变。封装成视图调用方不感知CREATE VIEW v_active_users_30d AS SELECT DISTINCT user_id FROM login_log WHERE created_at DATE_SUB(NOW(), INTERVAL 30 DAY);三、创建与管理视图3.1 创建CREATEVIEWv_xxxASSELECT...;3.2 替换已有视图CREATEORREPLACEVIEWv_xxxASSELECT...;3.3 删除DROPVIEWIFEXISTSv_xxx;3.4 查看视图定义SHOWCREATEVIEWv_xxx;四、视图的限制4.1 视图不一定能更新视图背后是 SELECT有些视图是只读的不能INSERT/UPDATE/DELETE视图定义是否可更新单表、无聚合、无 DISTINCT、无 GROUP BY✅ 可更新多表 JOIN❌ 不可更新含聚合函数COUNT/SUM❌ 不可更新含DISTINCT/GROUP BY/HAVING❌ 不可更新含UNION❌ 不可更新子查询引用FROM的表❌ 不可更新::: warningMySQL 允许看似可更新的视图背后静默失败——比如INSERT INTO v_xxx没报错但实际没生效。生产环境对视图的写操作要谨慎最好绕过视图直接改原表。:::4.2 视图性能不一定好每次查视图都执行一次底层 SELECT。如果视图背后 JOIN 了 5 张表又没建索引比直接写 JOIN 更慢。EXPLAINSELECT*FROMv_student_scoreWHEREclass_name高三一班;-- typeALL rows100 万 → 全表扫描性能差优化方法给底层表的关键字段建索引视图里加WHERE条件过滤用物化视图MySQL 不支持但可以定时 INSERT INTO 一张真实表4.3 视图嵌套有上限MySQL 视图嵌套层数有上限默认不高复杂业务不要套太多层。五、视图 vs 临时表 vs 子查询维度视图临时表子查询存储不存储虚拟存储在内存 / 磁盘不存储复用多查询可复用会话内复用单查询内索引不能加索引能加索引不能适用稳定抽象层复杂中间计算一次性查询-- 视图稳定抽象全局可复用 CREATE VIEW v_top_students AS SELECT student_id, AVG(score) AS avg_score FROM score GROUP BY student_id HAVING avg_score 90; -- 临时表会话内的中间结果可建索引 CREATE TEMPORARY TABLE tmp_score AS SELECT student_id, AVG(score) AS avg_score FROM score GROUP BY student_id; ALTER TABLE tmp_score ADD INDEX idx_avg (avg_score); -- 子查询一次性 SELECT * FROM ( SELECT student_id, AVG(score) AS avg_score FROM score GROUP BY student_id ) t WHERE avg_score 90;六、Node 端使用视图视图对应用层是透明的——当表用const mysql require(mysql2/promise); // 视图对 Node 来说就是一张普通表 const [rows] await pool.execute( SELECT * FROM v_student_score WHERE class_id ? ORDER BY score DESC LIMIT 10, [3] );七、何时用视图✅适合用复杂 JOIN 的复用不同业务都要查同一份数据权限隔离不同角色看不同字段业务口径封装活跃用户等❌不适合性能关键的查询视图不能加索引复杂视图性能差频繁变更的业务逻辑改视图定义比改应用代码麻烦多层嵌套层数多难调试八、小结视图 包装好的 SELECT对外是虚拟表不存储数据三大作用简化查询 / 权限隔离 / 抽象业务规则多表 JOIN、聚合、DISTINCT 视图不能更新视图性能 底层 SELECT 性能复杂视图要靠索引优化与临时表 / 子查询的取舍视图是稳定抽象层临时表是会话中间计算子查询是一次性
延伸阅读

更多相关文章

2026/9/12 22:35:56

Grok Bot 技术架构拆解:四个支柱撑起一个会干活的AI队友

上一篇我聊了 Grok Bot 的定位——「拥有自己云电脑的 AI 队友」。很多人看完追问:它到底是怎么做到的?为什么别的 AI 还停在「问答」,它已经能「执行」了? 这篇不谈营销话术,只拆技术架构。把 Grok Bot 拆开看&#…

2026/9/14 3:38:35

C语言实现HTTP请求:从Socket编程到HTTPS处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 3:38:35

从超级个体到超级团队:企业级Agent平台落地关键要素解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 3:38:35

激光位移传感器在3C厚度检测中的精准选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码