发布时间:2026/8/25 13:56:41
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/8/25 13:56:41

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

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

2026/8/25 16:12:09

SpringBoot集成测试的最佳实践分享

你盯着那条红色失败用例,昨晚它明明还是绿的。没有改任何业务代码,只是CI环境的数据库连接池比本地小。这是SpringBoot集成测试最常见的噩梦——测试本身成了比被测代码更脆弱的存在。当一套测试需要依赖环境、顺序、甚至运气才能通过时,它就…

2026/8/25 16:12:09

FreeRTOS-之中断管理(Interrupt Management)详解与实战

在嵌入式实时操作系统(RTOS)中,硬件中断(ISR)拥有最高优先级,用于对外部突发事件(如串口接收、按键按下、ADC 采样完成等)做出即时响应。 然而,如果在中断服务函数(ISR)中执行耗时操作,会导致系统中断延迟过长,甚至影响其他高优先级中断的响应。FreeRTOS 提供了完…

2026/8/25 16:12:09

主键索引为什么要有序

数据库索引是什么? B树B树是如何工作的?按排序顺序存储数据如果无序排序/随机uuid会怎么样? 页分裂,碎片化,写入性能下降,空间浪费具体好处:快速查找(二分查找),范围查询(between 、…

2026/8/25 16:12:09

【AI智能体】Codex 插件从使用到项目开发实战操作详解

目录 一、前言 二、Codex 介绍 2.1 Codex 是什么 2.2 Codex能做什么? 2.3 Codex 插件介绍 2.3.1 插件是什么? 2.3.2 插件有什么作用? 2.3.3 Codex 有哪些官方插件? 2.3.4 Codex 插件如何使用和管理 三、Codex 内置插件使…

2026/8/25 16:12:09

如何构建自己的“ Harness ”

干货长文预警。很多人"让 AI 写代码"已经驾轻就熟,但"让 AI 稳定地产出能上生产的代码"是另一回事。这篇文章我拿一个真实例子——RBAC 权限系统(用户-角色-权限)——把完整工作流拆开:每一步为什么这么做、具…

2026/8/25 16:07:08

装修还没开工,AI已经替你把坑踩了一遍

装修这件事,大概是成年人世界里最让人头疼的“必修课”之一。 你刚拿到新房钥匙,满心欢喜地开始看效果图、选风格、谈装修公司。设计师给你看的效果图美得让你心动——无主灯设计、满墙收纳柜、开放式厨房、艺术吊顶……每一个细节都像是理想中家的模样…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…