当前位置: 首页 > article >正文

MySQL视图相关

视图基础概念

  • 定义:视图是一条SELECT语句执行后返回的结果集,是对若干基本表的引用,是一张虚表,不存储具体数据。
  • 特性:依赖基本表,基本表数据改变时视图数据也随之改变;限定条件下可进行增删改操作。
  • 作用:简化复杂查询操作,增强 SQL语句可读性;实现更精细的权限控制,可将权限限定到行级和列级。
  • 使用场合:在权限控制场景,避免用户访问敏感信息列;当关键信息分散在多个复杂关联表时,通过视图提取所需信息。
  • 列的构成:列的的来源和独立性

可独立插入列:若视图中的列来自不同基表,且这些列可以独立插入到各自的基表中,即列之间不存在复杂的依赖关系,那么视图可能支持插入操作。例如,视图 v_info 由 employees 表的 employee_name 列和 departments 表的 department_name 列组成,这两列在各自基表中可独立插入,就有可能通过视图插入数据。

复杂列计算或聚合:若视图包含通过函数计算、聚合函数(如 SUM、AVG 等)得到的列,或者使用了 DISTINCT、GROUP BY、HAVING 等关键字,通常不允许插入数据。因为这些操作的结果并非直接对应基表的某个列,数据库无法确定如何将插入值分配到基表中。

视图操作

  • 创建视图:格式:CREATE VIEW 视图名称 AS SQL语句。
    MySQL 视图不支持创建子查询,若有子查询需拆开分别创建视图。创建时还可指定algorithm、definer、sql security等参数。
  • 查询视图:格式:SELECT * FROM v1;。
  • 删除视图:格式:DROP VIEW 视图名称。
  • 修改视图:格式:ALTER VIEW 视图名称 AS SQL语句,如ALTER VIEW v1 AS SELECT * FROM A WHERE A.id > 10;。

视图增删改操作限制

  • 多表关联视图:由多张关联表连接而成的视图,不能同时修改多张表的数据。例如在view_user_course视图(基于user、user_course、course表关联创建)上同时修改username和coursename会失败。

插入(INSERT):多表视图一般不允许直接插入数据,因为很难明确数据应该如何在多个基表之间分配。不过,如果视图的定义满足一定条件,例如视图只引用了多个表中可以独立插入的列,且这些列之间没有复杂的关联关系,那么可以通过视图插入数据。

更新(UPDATE):如果多表视图的更新操作只影响到一个基表,并且不违反该基表的约束条件,那么可以对该视图进行更新操作。例如,视图 v_sales 由 orders 表和 customers 表连接而成,若更新操作只涉及 orders 表的列,且满足 orders 表的约束条件,就可以更新该视图。

删除(DELETE):多表视图的删除操作通常也受到限制,只有当删除操作明确只影响一个基表时才可以执行。例如,视图中只涉及一个基表的主键列,通过该视图删除数据时,实际上是删除该基表中对应的数据。

  • 一对一关系视图:在没有其他约束(如视图中缺失的基本表必填字段)时,可以进行增删改数据操作 。

插入(INSERT):只要视图包含了基表中所有非空且无默认值的列,就可以通过视图向基表插入数据。例如,有一个单表视图 v_employees 基于 employees 表创建,且包含了 employees 表中所有非空列,那么就可以使用 INSERT INTO v_employees (col1, col2) VALUES (‘value1’, ‘value2’); 向基表插入数据。

更新(UPDATE):可以对视图中的数据进行更新,更新操作会直接反映到基表上。只要更新的数据满足基表的约束条件,如数据类型、唯一性约束等,更新操作就能成功。

删除(DELETE):可以删除视图中的数据,相应的基表数据也会被删除。

  • 一对多关系视图:基于存在一对多关联的两张表创建,即一张表中的一行可以与另一张表中的多行对应。例如,customers(客户)表和 orders(订单)表,一个客户可以有多个订单。只修改一张表的数据且无其他约束时,可进行改数据操作,但一般不能进行删除和增加操作。

更新(UPDATE):只修改一张表的数据且无其他约束时,可进行改数据操作。因为当只修改一方表的数据时,数据库能够明确将修改操作应用到对应的基表上。例如,若视图 v_customer_orders 基于 customers 表和 orders 表创建,只修改 customers 表中的客户信息(如 customer_name),只要不违反 customers 表的约束条件,就可以通过视图进行修改。

删除(DELETE)和插入(INSERT)操作:一般不能进行删除和增加操作。删除操作可能会导致数据的不一致性,因为删除视图中的一行可能涉及到多张表的数据关联。例如,删除视图中一个客户的订单记录,可能会影响到 customers 表和 orders 表之间的关联关系。增加操作同样难以确定如何将新数据分配到各个基表中,所以通常不允许通过一对多关系视图进行删除和增加操作。

注意
mysql视图不支持创建子查询,所以用子查询的时候,要将其拆开使用

相关文章:

MySQL视图相关

视图基础概念 定义:视图是一条SELECT语句执行后返回的结果集,是对若干基本表的引用,是一张虚表,不存储具体数据。特性:依赖基本表,基本表数据改变时视图数据也随之改变;限定条件下可进行增删改…...

blender 超逼真角色daz 纹理材质 humanpro插件

https://www.youtube.com/KhanhVo-zp9lh/featured https://superhivemarket.com/products/humanpro https://superhivemarket.com/products/humanpro HUMANPRO 插件 - BLENDER HumanPro 是一款专为帮助用户轻松快速地创建高度精细逼真的人体皮肤纹理和复杂皱纹而设计的插件…...

C++简易日志

文章目录 main.cppLog.hLog.cppClassAuxMacro.hSingleton.h main.cpp #include "Log.h"int main() {LogInfo << "main start";int i 1;double d 3.14;LogInfo << "i " << i << ", d " << d;getcha…...

kotlin音乐之自定义唱片组件(简单版本)

代码地址 import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.content.Context import android.os.Binder import android.util.AttributeSet import android.view.animation.LinearInterpolator import androidx.appcompat.widg…...

Redis 版本变更的变化

Redis 版本变更的变化 以下是 Redis 主要版本的清单及其核心功能变化的梳理&#xff0c;按时间顺序整理关键版本演进 8版本没有整理&#xff1a; Redis 1.0 (2009) 初始版本&#xff1a;发布首个稳定版本&#xff0c;支持基本键值存储。 核心特性&#xff1a; 支持字符串&…...

flink扫盲-调整checkpoint的时间会影响原来的state数据吗

一、核心结论​​ ​​原 State 数据仍可用​​ 只要作业的 ​​拓扑结构&#xff08;DAG&#xff09;​​ 和 ​​状态类型&#xff08;StateDescriptor&#xff09;​​ 未发生变更&#xff0c;旧的 Checkpoint 依然有效。Checkpoint 间隔调整仅影响 ​​新生成的 Checkpoint…...

文本纠错WPS插件:提升文档质量的利器

文本纠错WPS插件&#xff1a;提升文档质量的利器 引言 在数字化办公日益普及的今天&#xff0c;文档的质量直接影响到我们的工作效率和形象。一个错别字或标点错误&#xff0c;可能就会让我们的专业形象大打折扣。今天&#xff0c;我要向大家介绍一款强大的WPS插件——文本纠…...

多光谱相机与高光谱相机的区别

多光谱相机与高光谱相机均属于光谱成像设备&#xff0c;但两者在‌光谱分辨率、波段数量、数据维度及应用场景‌上存在显著差异。以下是详细的对比分析&#xff1a; ‌一、核心差异对比 二、工作原理差异‌ ‌多光谱相机‌ ‌波段选择‌&#xff1a;根据目标物特性‌预设特定…...

MVCC详细介绍及面试题

目录 1.什么是mvcc&#xff1f; 2.问题引入 3. MVCC实现原理&#xff1f; 3.1 隐藏字段 3.2 undo log 日志 3.2.1 undo log版本链 3.3 readview 3.3.1 当前读 ​编辑 3.3.2 快照读 3.3.3 ReadView中4个核心字段 3.3.4 版本数据链访问的规则&#xff08;了解&#x…...

电商企业如何实现流程精细化?日事清「标准化+可视化+自动化」全流程管理实战解析​

电商企业在业务快速发展中&#xff0c;往往会遇到如下问题&#xff1a; 1、店铺多款产品需要上新维护&#xff0c;但工作重点往往不清晰&#xff0c;员工经常忘记&#xff0c;没做也不当回事&#xff1b; 2、员工做事经常错漏细节&#xff0c;犯低级错误&#xff1b; 3、人员…...

威锋VL822-Q7T10GHUB芯片适用于扩展坞显示器

一、概述 VL822-Q7T是VIA Lab&#xff08;威盛电子旗下专注于USB相关技术研发的子公司&#xff09;精心打造的一款高性能USB 3.1 Gen2集线器控制器芯片。在当今数字化时代&#xff0c;USB接口作为设备连接与数据传输的核心通道&#xff0c;其性能与稳定性至关重要。VL822-Q7T凭…...

交换机与路由器的默契配合:它们的联系与区别

交换机与路由器的默契配合&#xff1a;它们的联系与区别 一. 交换机与路由器的基本功能1.1 交换机的功能1.2 路由器的功能 二. 交换机和路由器的区别三. 交换机和路由器的联系3.1 数据转发的协作3.2 网络分段与分隔3.3 协同工作提供互联网接入 四. 交换机和路由器的联合应用场景…...

Git提交规范及最佳实践

Git 提交规范通常是为了提高代码提交的可读性、可维护性和自动化效率&#xff08;如生成 ChangeLog&#xff09;。以下是常见的 Conventional Commits 规范&#xff0c;结合社区最佳实践总结而成&#xff1a; 1. 提交格式 每次提交的 commit message 应包含三部分&#xff1a;…...

Ubuntu 常用命令行指令

1. 文件与目录操作 命令作用示例ls列出目录内容ls -l&#xff08;详细列表&#xff09;cd切换目录cd ~/Documentspwd显示当前目录路径pwdmkdir创建目录mkdir new_folderrm删除文件rm file.txtrm -r递归删除目录rm -r old_dircp复制文件cp file.txt backup/mv移动/重命名文件mv…...

Redis 分布式锁+秒杀异步优化

文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目&#xff0c;这里nginx使用轮询的方…...

Git_获取GitLab的token方法(访问令牌)

一、操作步骤 GitLab-获取token&#xff08;访问令牌&#xff09;主要步骤&#xff1a;以及相关截图 登录 GitLab 打开 GitLab 网站并登录你的账号。 进入用户设置 点击右上角头像 → Edit profile → 左侧菜单选择 Access Tokens。 创建 Token Token name: 输入名称&#…...

【生活相关-日语-日本-东京-留学生-搬家后或新入驻-水道局申请饮用水(1)-办理手续】

【生活相关-日语-日本-东京-搬家后-水道局申请饮用水-办理手续】 1、前言2、情况说明&#xff08;1&#xff09;他人代办&#xff08;2&#xff09;打电话&#xff08;3&#xff09;网络申请&#xff08;4&#xff09;你将会面临什么&#xff0c;主要步骤&#xff08;5&#xf…...

【C语言】--- 预处理详解

预处理详解 1. 预定义符号2. define定义常量2. define 定义宏4. 带有副作用的宏参数5.宏替换的规则6. 宏和函数的对比7. # 和 \##7.1#运算符 7.2 \##运算符8. 命名约定9.#undef10.命令行定义11.条件编译12. 头文件的包含12.1 头文件被包含的方式12.1.1 头文件的本地包含12.1.2 …...

【Axure视频教程】标准金额格式转换

今天教大家在Axure制作标准金额格式转换的原型模板&#xff0c;具体效果可以参考下方视频&#xff0c;该教程从0开始制作&#xff0c;手把手教学&#xff0c;无论是新手小白还是有一定基础的同学&#xff0c;都可以学习的哦。 【视频教程——试看版】 【Axure教程】标准金额格…...

每日算法(双指针算法)(Day 1)

双指针算法 1.算法题目&#xff08;移动零&#xff09;2.讲解算法原理3.编写代码 1.算法题目&#xff08;移动零&#xff09; 2.讲解算法原理 数组划分&#xff0c;数组分块&#xff08;快排里面最核心的一步&#xff09;只需把0改为tmp 双指针算法&#xff1a;利用数组下标来…...

微服务多模块构建feign项目过程与一些报错(2025详细版)

目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…...

性能测试-tomcat连接数

Tomcat 处理请求时,是需要 Connector 进行调度和控制的,Connector是Tomcat 处理请求的主干。 Connector 中有一个 accepf队列,当客户端向服务器发送http请求时,如果客户端与操作系统完成三次握手建立了连接,就将该连接放入accept队列,poller从队列中获取到链接后,从链接…...

【Django】框架-路由系统核心概念解析

1. 最基本路由关系 路由是URL地址与处理逻辑&#xff08;视图函数&#xff09;的对应关系。 本质&#xff1a;将用户请求的URL路径映射到具体的处理程序&#xff08;如Django视图函数&#xff09;。 示例&#xff1a; # urls.py urlpatterns [ path(home/, views.home_…...

C# 运行web项目

1、web项目直接点击顶部运行...

C++ 创龙UDP通讯demo

C 创龙UDP通讯demo #include <iostream> #include <vector> #include <string>static uint8_t checksum(uint8_t *buff,int size) {uint8_t ldr 0;for(int i 0;i<size;i){ldr ^ buff[i];}return ldr; }bool decode(uint8_t *inbuff,int inbuffsize,uin…...

深入讲解 CSS 选择器权重及实战

1. 权重计算规则详解 CSS 选择器的优先级由 三元组 (x, y, z) 决定&#xff0c;比较规则如下&#xff1a; 选择器类型权重值 (x, y, z)示例ID 选择器x 1#header → (1,0,0)类/伪类/属性y 1.active, :hover元素/伪元素z 1div, ::before 比较规则&#xff1a;从左到右逐级比…...

全网通emotn ui桌面免费吗?如何开机自启动

在智能设备的使用中&#xff0c;一款优秀的桌面系统能带来截然不同的体验。全网通Emotn UI桌面便是其中的佼佼者&#xff0c;它以完全免费的特性与卓越性能&#xff0c;成为众多用户的心头好。 其简洁美观的界面设计如同为设备换上"清新外衣"&#xff0c;常用功能一…...

【AI模型学习】MAE——CV界的无监督预训练

文章目录 一、诞生背景1.1 自监督学习的趋势2.2 ViT 的出现 二、模型2.1 模型架构2.1.1 数据shape变化2.1.2 模型架构流程图2.1.3 PyTorch 代码示例&#xff08;核心部分&#xff09; 2.2 位置信息2.3 非对称的编码器-解码器结构2.4图片重构 三、实验3.1 主实验3.2 消融实验3.3…...

远方游子的归家记:模仿美食网页的制作与实现

前言 2023年的夏天&#xff0c;闲得无聊学了一个礼拜前端知识点。并根据所学知识点模仿制作了一篇网络上公开发布的关于家乡美食的文章。今天才想到有这个不错的案例可以分享出来&#xff0c;以供大家学习参考。 知识点简介 运用的知识点比较简单&#xff0c;常规的div盒子&…...

【消息队列kafka_中间件】三、Kafka 打造极致高效的消息处理系统

在当今数字化时代&#xff0c;数据量呈爆炸式增长&#xff0c;实时数据处理的需求变得愈发迫切。Kafka 作为一款高性能、分布式的消息队列系统&#xff0c;在众多企业级应用中得到了广泛应用。然而&#xff0c;要充分发挥 Kafka 的潜力&#xff0c;实现极致高效的消息处理&…...