【MySQL笔记】视图

目录

    • 一、什么是视图?
    • 二、使用视图的优势
    • 三、视图的创建与使用
    • 四、不能更新视图的场景
    • 五、删除视图
    • 六、总结

一、什么是视图?

视图(View)是一种虚拟表,不存储实际数据,而是通过执行预定义的查询动态生成数据。用户可以像操作普通表一样对视图进行查询、更新和管理,但其数据完全依赖于基础表。视图的核心价值在于:

  • 封装复杂查询,简化数据访问。
  • 隐藏敏感字段(如密码、余额)。
  • 对外提供一致的列名和结构,避免业务代码频繁修改。
-- 示例:创建学生成绩视图
create view v_student_score as
selects.id, s.name, s.sno, cls.name as class_name, c.name as course_name, sco.score
from
student s, 
class cls, 
score sco, 
course c
where s.class_id = cls.id, 
and sco.student_id = s.id, 
and sco.course_id = c.id;

二、使用视图的优势

  1. 隐藏敏感字段
    例如账户表 account(id, name, balance, password) 中,通过视图仅暴露非敏感字段,将敏感字段balance,password隐藏:
create view v_account as 
select id, name from account;
  1. 统一访问规范
    当表结构变更时,假如 DBA 修改了 student 表,将列 sno 重命名为 number,如果不使用视图,那么就需要大量改动业务代码,将列 sno 重命名为 number,但是如果使用视图,则只需调整视图定义,业务代码不需要改动,只需要将查询语句的 sno 改为 number 即可,对外访问的“接口”依旧是 sno:
-- 旧视图
create view v_student (id, name, sno) as
select id, name, sno from student;-- 新视图(适应列名变更)
create view v_student (id, name, sno) as
select id, name, number from student;

三、视图的创建与使用

  1. 创建语法
create view view_name [(列别名1, 列别名2, ...)] as
select 语句; // 任意的查询语句都可以
  1. 视图与表连接查询
    视图可像普通表一样参与连接操作:
select * from v_student2 s 
join class c on s.class_id = c.id;
  1. 通过视图更新数据
    注意:更新视图会影响基础表,但需满足特定条件:
-- 更新视图(会影响基础表score)
update v_student_score1 set score = 95 where id = 1;

四、不能更新视图的场景

以下类型的视图不支持更新操作:

  • 使用聚合函数(如 SUM(), COUNT())。
  • 使用 distinct 或 group by / having。
  • 使用 union 或 union all。
  • 包含子查询的 select 列表。
  • from 子句中引用不可更新视图。
  • 包含 order by 子句,可能导致更新失败。

五、删除视图

-- 可以删除单个视图
drop view v_student;-- 可以批量删除视图
drop view v_student2, v_student_score;

六、总结

特性说明
存储不存储数据,依赖基础表动态生成
核心用途简化复杂查询、隐藏敏感字段、统一数据接口
更新限制避免聚合、分组、排序等场景
性能影响查询性能与底层SQL复杂度相关,无额外存储开销
维护建议视图嵌套不超过两层,避免过度封装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915277.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RK3576】【Android14】分区划分

获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中: 【RK3576】Android 14 驱动开发实战指南

Datawhale 25年7月组队学习coze-ai-assistant Task1学习笔记:动手实践第一个AI Agent—英伦生活口语陪练精灵

Chap1 了解AI工作流 1.1什么是工作流 工作流 就像是一条流水线,把复杂的任务拆分成多个简单的步骤,每一步都有明确的目标和流程。1.2智能体和工作流的区别 智能体(AI Agent) **是什么 :**智能体是一个自动化的“助手”…

Webpack插件开发深度指南:从原理到实战

Webpack插件是前端工程化的核心引擎,本文将带你深入插件开发全流程,实现一个功能完整的资源清单插件,并揭示Tapable事件系统的核心原理。 一、Webpack插件机制解析 1.1 插件架构核心:Tapable事件系统 Webpack基于Tapable构建了…

2、Redis持久化详解

Redis持久化详解 文章目录 Redis持久化详解 前言 RDB和AOF的区别 RDB和AOF的优缺点 Redis 持久化配置 1、RDB持久化配置 2、AOF持久化配置(尝试修复会删除aof文件内容) 3、AOF 重写功能 新增知识点: 新增知识点: 前言 Redis是一种高级 key-value 型的NoSQL数据库。它跟mem…

curl 命令详解

curl 命令的 -d/–data 和 --data-urlencode 的区别 curl 命令的 -d/–data 和 --data-urlencode 都用于发送 HTTP POST 请求的数据,但关键区别在于 是否自动对数据进行 URL 编码。以下是详细对比: curl 命令的 -d/--data 和 --data-urlencode 都用于发送…

ubuntu下好用的录屏工具

以下是 vokoscreen 的安装教程,适用于 Linux 系统。vokoscreen 是一款简单易用的屏幕录制工具,支持录制屏幕、摄像头和音频。 安装 vokoscreen vokoscreen 提供了多种安装方式,包括通过包管理器、Deb 包或 AppImage 文件。 方法 1&#xf…

笔试大题20分值(用两个栈实现队列)

目录前言一、原题二、解题思路三、代码实现(c/c)C语言代码C代码实现结语前言 目前博主在处于秋招求职的关键时期,在暑假这段时间会频繁更新博客,想在暑假期间把一些常考的面试和笔试题过一下,利用这两个月沉淀一下技术…

【知识扫盲】tokenizer.json中的vocab和merges是什么?

在自然语言处理里,tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 库生成的,它是分词器配置的核心文件。这里面的 vocab 和 merges 是子词分词算法(像 BPE 这种)的重要构成要素。下面为你详细解释它们的作用和工作原理&…

【安卓笔记】RxJava的Hook机制,整体拦截器

0. 环境: 电脑:Windows10 Android Studio: 2024.3.2 编程语言: Java Gradle version:8.11.1 Compile Sdk Version:35 Java 版本:Java11 1. 使用场景 整个项目都是用了RxJava,需要对 整个/部分 项目…

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

再做项目时相信大家都会用到坐标转化,例如,我之前写的案例分享中的博客都用到过,之前总是找借口进行if else判断,虽然可以实现,但是比起坐标变换无论代码复杂程度还是运行速度都比较差,之前参加过曹大师的教学训练营,但是明显感觉到大佬写代码的逻辑性以及模块化能力都比…

数据库防止数组字符串序列化

请求接到数组["aa","bb"]后,后端需要转换成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他转换,在字段存入数据库后会["\"a…

若依框架文件上传返回路径端口错误 - Nginx代理环境下serverConfig.getUrl()获取端口异常

目录一 、问题描述二、问题现象三、问题根本原因3.1 代码分析3.2 问题核心四、解决方案五、总结一 、问题描述 在使用若依框架进行项目开发时,遇到了一个令人困扰的问题:文件上传功能在本地开发环境运行正常,但部署到服务器后,上…

使用PyInstaller打包 Python 工程

引言:大模型是个好工具,尽管好多内容都是拼凑的,但是整理学到的就是自己的。因工作需要隐藏python源代码,方法有PyInstaller 、Cpython等多种方法,PyInstaller更为常用,PyInstaller打包 Python 工程步骤整理如下: 一、确保系统环境准备就绪 安装 Python 和 pip 确认版本…

Python 程序设计讲义(1):PyCharm 安装教程

Python 程序设计讲义(1):PyCharm 安装教程 一、安装 Python 解释器 1、下载 Python 安装文件 点击如下链接进入 Python 官网: https://www.python.org/ 在弹出的页面中单击【Downloads】,然后单击下面的【Download Pyt…

uniapp云打包安卓

1、基础云打包 2、修改logo3、怎么实现下拉菜单4、修改启动页启动页默认这样 5、URL Scheme页面跳转

Python----NLP自然语言处理(英文分词器--NLTK)

一、NLTK_介绍NLTK(Natural Language Toolkit,自然语言处理工具包),一个主要用于清洗和处理英文文本的Python工具包。它有很多的功能,我们主要使用的是它的分词功能,之前讲过中文分词是比较复杂的&#xff…

传统浏览器过时了?Dia如何用AI重新定义上网体验

欢迎来到我的博客,代码的世界里,每一行都是一个故事🎏:你只管努力,剩下的交给时间 🏠 :小破站 传统浏览器过时了?Dia如何用AI重新定义上网体验它是什么核心功能搜索编程左右互动感谢…

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 1. 引言 在当今的互联网通信时代,实时语音通信已成为人们日常生活中不可或缺的一部分。然而,语音通信质量常…

Attu-Milvus向量数据库可视化工具

本文介绍了如何安装可视化工具Attu,包括使用Docker镜像启动并访问Attu服务。 目录 前言 一、Attu安装 1. Docker容器安装 2. 桌面程序安装 二、使用 Milvus Web U 前言 Attu是一款专为Milvus向量数据库打造的开源数据库管理工具,提供了便捷的图形化…

高效检测数据突变的MDAM算法详解

在数据分析领域,我们经常需要检测数据序列中的异常变化。今天给大家介绍一种简单但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能帮你轻松发现数据中的均值突变现象!1. 🔍 算法原理累计数均值突变检测算法(MDAM…