文章目录

  • 什么是MySQL 视图
    • 定义
    • 为什么使用视图
    • 创建/替换视图
    • 更新视图
    • 总结

什么是MySQL 视图

定义

视图是一种虚拟表,是一个逻辑表,本身并不包含数据,通过select语句去基本表上动态生成数据。

举个例子:

你有一个员工表employees

CREATE TABLE employees (id INT,name VARCHAR(100),department VARCHAR(50),salary DECIMAL(10,2)
);

你想经常查看技术部员工的信息,可以创建一个视图:

CREATE VIEW tech_employees AS
SELECT id, name, salary
FROM employees
WHERE department = '技术部';

现在你可以像查询一张表一样使用这个视图:

SELECT * FROM tech_employees;

为什么使用视图

  1. 封装复杂查询:把多表 join 或带过滤条件的查询封装成一个视图,使用更方便。
  2. 提供数据访问权限控制:可以只给用户访问视图的权限,不直接暴露底层表。
  3. 提高代码复用性:视图定义一次,多次复用。
  4. 解耦数据库设计:隐藏底层表结构的变化,对上层透明。

创建/替换视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

其中,在create语句的时候加上or replace然后对想要修改的视图进行再次创建就可以替换已有视图。

更新视图

对视图的更新操作(INSERT、UPDATE、DELETE)最终都会反映到其对应的基表上。

**[WITH [CASCADED | LOCAL] CHECK OPTION]:**表示视图在更新时保证在视图的权限范围之内

  • cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件。级联作用,这个视图所关联的上层所有视图和基表都会开始在更新的时候判断条件。
  • local表示更新视图的时候,要满足该视图定义的一个条件即可。没有级联功能,只有本视图需要判断条件。

注: 要使视图更新,还需要保证视图中的行和基表中的行之间存在着一对一的关系。如果视图的select语句包含以下任意一项,视图就不能被更新:

  1. 聚合函数或窗口函数(SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL

总结

MySQL视图是数据库中的虚拟表,它不存储实际数据,而是基于SELECT语句动态生成结果。视图的主要价值在于简化复杂查询、提供安全的数据访问控制,以及提高代码的复用性。

在实际应用中,视图特别适合用于封装常用的多表关联查询、隐藏敏感字段,或为不同用户角色提供定制化的数据视角。需要注意的是,并非所有视图都支持更新操作,包含聚合函数、DISTINCT、GROUP BY等复杂查询的视图通常是只读的。

合理使用视图可以让数据库设计更加灵活,提升开发效率,同时增强数据安全性。

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

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

相关文章

Neo4j 5.x版本的导出与导入数据库

neo4j的版本管理真的是灾难级别的,文档也乱,特定版本也难下,不同版本之间的命令存在很大差异,网上的很多资料都是Neo4j 4.x的,在此给出我自己试出来的5.x的导入导出方法使用前先关闭neo4j服务进入到neo4j安装目录的bin…

Java——深入解析 CGlib 与 JDK 动态代理:原理、区别与实践

在 Java 开发中,动态代理是实现 AOP(面向切面编程)的核心技术,广泛应用于日志记录、事务管理、权限控制等场景。其中,JDK 动态代理和 CGlib 是两种最常用的动态代理实现方式。本文将从原理、区别、使用场景等方面深入解…

变频器带动电机:全方位解析参数变化

在现代工业自动化领域,变频器作为电机调速的核心设备,扮演着至关重要的角色。它能够精准地控制电机的运行状态,通过改变电源频率和电压,实现电机转速、转矩、功率等参数的灵活调整。本文将深入探讨变频器带动电机时,各…

OpenCV 入门知识:图片展示、摄像头捕获、控制鼠标及其 Trackbar(滑动条)生成!

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

Elasticsearch是什么?

Elasticsearch(简称ES)是一种基于Lucene的分布式搜索引擎,广泛应用于大数据、日志分析、全文搜索等场景。它的核心是提供高效、可扩展的搜索和分析能力。ES 提供了强大的全文搜索、聚合分析、数据可视化等功能,可以用来快速地对海…

(Arxiv-2025)OmniGen2:通向先进多模态生成的探索

OmniGen2:通向先进多模态生成的探索 paper title:OmniGen2: Exploration to Advanced Multimodal Generation paper是BAAI发布在Arxiv 2025的工作 Code:链接 Abstract 在本研究中,我们提出了 OmniGen2,这是一种多功能、开源的生成…

期权到期会对大盘有什么影响?

本文主要介绍期权到期会对大盘有什么影响?期权到期对大盘的影响主要体现在以下几个方面,但整体影响通常有限且短期,具体效果需结合市场环境、期权规模及行权价位置综合判断。期权到期会对大盘有什么影响?1. 市场流动性波动到期日效…

【LeetCode刷题指南】--随机链表的复制

🔥个人主页:草莓熊Lotso 🎬作者简介:C研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言:生活是默默的坚持,毅力是永久的…

系统学习算法:专题十四 链表

前提知识:1.画图,数据结构相关的题,画图必不可少,只要能画出来,那么后面的代码就很容易能写出来,因为将抽象的数据结构转换为直观的图画2.引入虚拟头结点,也叫哨兵位,能够避免考虑很…

零基础学后端-PHP语言(第一期-PHP环境配置)

从本期开始,我们学习PHP,但是我们要先配置PHP环境 PHP官网链接:PHP For Windows: Binaries and sources Releases 我们可以看到有以下资源 可以看到有很多php的版本,有Non Thread Safe和Thread Safe,还有zip&#xf…

C++ primer知识点总结

《C Primer》系统学习指南:从C到C的平滑过渡根据你提供的《C Primer》目录和你的需求(C语言背景转C,侧重网络编程),我将为你制定一个全面的学习计划,包含知识点详解、C/C对比、实战案例和分阶段项目练习。第…

异构融合 4A:重构高性能计算与复杂场景分析的安全与效率边界

当全球数据量以每两年翻一番的速度爆炸式增长,高性能计算(HPC)与复杂场景分析正成为破解气候预测、基因测序、金融风控等世界级难题的关键引擎。但异构计算环境的碎片化、多系统协同的复杂性、数据流动的安全风险,正在形成制约行业…

【华为机试】240. 搜索二维矩阵 II

文章目录240. 搜索二维矩阵 II描述示例 1示例 2提示解题思路核心分析问题转化算法实现方法1:右上角开始搜索(推荐)方法2:逐行二分查找方法3:分治法方法4:左下角开始搜索复杂度分析核心要点数学证明右上角搜…

疯狂星期四文案网第16天运营日记

网站运营第16天,点击观站: 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 昨日访问量 昨日30多ip, 今天也差不多,同步上周下降了一些,感觉明天疯狂星期四要少很多了,记得上周四700多ip&…

Linux系统基础入门与配置指南

Linux基本概述与配置 一、我们为什么使用Linux(Linux的优点)开源与自由 免费: 无需支付许可费用,任何人都可以自由下载、安装和使用。源代码开放: 任何人都可以查看、修改和分发源代码。这带来了极高的透明度、安全性和…

如何删除VSCode Marketplace中的publisher

网页上并没有提供删除的按钮,需要通过命令的形式删除。 vsce delete-publisher [要删除的名字]# 键入token # y 确认这里的token是之前在Azure DevOps中创建的token,忘了的话可以重建一个 刷新网页看一下 成功删除了。

Windows安装git教程(图文版)

Git 是一个分布式版本控制系统,用于跟踪文件的变化,特别是在软件开发中。它使得多个开发者可以在不同的机器上并行工作,然后将他们的改动合并在一起。是在开发过程中,经常会用到的一个工具。本章教程,主要介绍Windows上…

Remote Framebuffer Protocol (RFB) 详解

RFC 6143 规范文档:The Remote Framebuffer Protocol 文章目录1. 引言2. 初始连接流程2.1 TCP连接建立2.2 协议版本协商2.3 安全握手3. 显示协议机制3.1 核心概念3.2 像素格式4. 输入协议4.1 键盘事件(KeyEvent)4.2 鼠标事件(PointerEvent)5. 协议消息详解5.1 握手消…

从 DeepSeek-V3 到 Kimi K2:八种现代大语言模型架构设计

编译:青稞社区Kimi 原文:https://magazine.sebastianraschka.com/p/the-big-llm-architecture-comparison 首发:https://mp.weixin.qq.com/s/lSM2jk1UxJVz1WllWYQ4aQ 自原始 GPT 架构开发以来已经过去了七年。乍一看,从 2019 年的…

linux驱动开发笔记--GPIO驱动开发

目录 前言 一、设备树配置 二、驱动编写 三、用户空间测试 总结 前言 开发平台:全志A133,开发环境:linux4.9andrio10,开发板:HelperBoard A133_V2.5。 一、设备树配置 打开板级设备树配置文件,路径&a…