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

MySQL-视图:视图概述、使用视图注意点、视图是否影响基本表

视图

    • 一、视图概述
    • 二、使用视图注意点
    • 三、视图操作是否影响基本表

一、视图概述

在数据库管理系统中,视图(View)是一种虚拟表,它并不实际存储数据,而是基于一个或多个实际表的查询结果。视图提供了一种对数据库中数据进行抽象和封装的方式,用户可以按照自己的需求定义视图,并通过视图来操作和访问数据,而无需直接处理底层表结构的复杂性

视图的主要特点:

1、逻辑表:视图是从一个或多个基本表(或者其它视图)导出的虚表,其内容由查询语句定义,不独立存储实际数据。
2、数据安全性:通过视图,数据库管理员可以控制用户对数据的访问权限,只让用户看到和修改他们需要的部分数据。
3、简化查询:视图可以隐藏复杂的查询逻辑,使得用户可以使用更简洁的方式来访问数据。
4、数据整合:从不同表中抽取相关的列组成视图,实现数据的逻辑整合。
5、数据更新限制:并非所有的视图都可以用于插入、更新和删除操作,这取决于视图的定义方式以及数据库系统的支持程度。

视图创建与使用示例:
以MySQL为例
假设我们基于上述示例,为employeesdepartments表创建基本的建表语句:

-- 创建员工表
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100),department_id INT,salary DECIMAL(10, 2)
);-- 创建部门表
CREATE TABLE departments (id INT PRIMARY KEY,department_name VARCHAR(100)
);-- 插入一些示例数据
INSERT INTO departments (id, department_name) VALUES
(1, '销售部'),
(2, '技术部');INSERT INTO employees (id, name, department_id, salary) VALUES
(1, '张三', 1, 5000),
(2, '李四', 1, 6000),
(3, '王五', 2, 7000);

假设有一个员工表employees,包含id,name,department_id,salary等字段,还有一个部门表departments,包含id和department_name字段。为了方便员工查看自己所在部门的所有人员信息,我们可以创建一个视图:

CREATE VIEW employee_department AS
SELECT e.id, e.name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id;

在这里插入图片描述

这样,用户就可以像查询真实表一样查询这个视图:

-- 查询销售部所有员工信息
SELECT * FROM employee_department WHERE department_name = '销售部';

在这里插入图片描述

需要注意的是,当基表中的数据发生变化时,通过视图查询到的结果也会随之变化,因为视图是动态反映其依赖的基础表的数据状态的。同时,如果视图允许更新操作,那么对视图的更新实际上会影响到对应的基表

二、使用视图注意点

视图使用的一些注意点

在使用数据库视图时,需要注意以下几点,并通过例子来说明:
1、数据更新限制: 视图可以用于查询操作,但并非所有视图都支持插入、更新和删除(DML操作)。这主要取决于视图的定义。如果视图包含了GROUP BY、DISTINCT、JOIN或者UNION等聚合或复杂操作,可能无法直接进行修改。例如:

   -- 创建一个基于聚合函数的视图CREATE VIEW employee_avg_salary ASSELECT department_id, AVG(salary) as avg_salaryFROM employeesGROUP BY department_id;-- 尝试对这个视图进行更新,通常会失败,因为avg_salary是聚合函数的结果UPDATE employee_avg_salary SET avg_salary = 5000 WHERE department_id = 1;

在这里插入图片描述

2、权限管理: 虽然视图可以用来实现数据安全性,但要谨慎管理用户对视图的权限。如果不正确地分配了权限,可能会导致用户通过视图间接访问到原本不应查看的数据。例如:

   -- 假设有一个只显示部门A员工信息的视图CREATE VIEW department_A_employees ASSELECT * FROM employees WHERE department_id = 'A';-- 如果错误地赋予用户对这个视图的写权限,他们可能尝试更新实际表中的数据GRANT INSERT, UPDATE, DELETE ON department_A_employees TO user1;

在这里插入图片描述

在这里插入图片描述

3、性能影响: 视图的操作最终会转换为对底层表的操作,因此,复杂的视图查询可能会影响性能。特别是当视图涉及多个表的JOIN或者包含子查询时,执行效率可能较低。为了提高性能,应确保视图定义简洁且有效利用索引
4、依赖性与刷新: 视图的内容依赖于其引用的基础表。一旦基础表的数据发生变化,通过视图查询得到的结果也会随之变化。但某些情况下,如物化视图,需要手动刷新才能获取最新的数据
5、命名冲突: 在创建视图时,要注意避免与已存在的表或视图名称发生冲突,以防止混淆和误操作
6、维护成本: 当基础表结构发生变化时,可能需要重新考虑并调整相关视图的定义,尤其是那些依赖于特定列名或字段顺序的视图。
7、嵌套视图: 使用嵌套视图(即视图中包含其他视图)可能导致查询更加复杂,增加理解难度,并可能影响性能。在设计时尽量减少视图的嵌套层级,保持结构清晰。

三、视图操作是否影响基本表

视图的操作在特定条件下可以影响基本表。具体来说:
1、查询操作:对视图进行SELECT查询不会直接影响基本表,它只是基于视图定义的查询语句从基本表中检索数据。
2、插入(INSERT)、更新(UPDATE)和删除(DELETE)操作

  • 在某些情况下,用户可以在视图上执行DML操作,并且这些操作会反映到相应的基表中。但是,这要求视图满足以下条件:

    • 视图必须是可更新视图,即视图中的每一行都能唯一映射回基表的一行。
    • 更新操作不能违反任何约束,如主键、外键或唯一性约束。
    • 不涉及分组函数、DISTINCT、JOIN等非确定性或复杂的表达式。
  • 当在符合上述条件的视图上执行修改操作时,数据库系统会将这些修改转换成对基础表的相应操作

3、不符合更新条件的情况

  • 如果视图不满足可更新条件,通常无法直接通过视图来更改底层表的数据,试图这样做可能会导致错误或者数据库系统拒绝执行该操作。总结而言,视图本身不存储数据,但针对部分允许更新的视图进行操作时,确实能够间接影响到关联的基本表。然而,对于那些设计为只读或结构复杂不支持更新的视图,则不会对基本表造成影响

MySQL-视图:视图概述、使用视图注意点、视图是否影响基本表 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

相关文章:

MySQL-视图:视图概述、使用视图注意点、视图是否影响基本表

视图 一、视图概述二、使用视图注意点三、视图操作是否影响基本表 一、视图概述 在数据库管理系统中,视图(View)是一种虚拟表,它并不实际存储数据,而是基于一个或多个实际表的查询结果。视图提供了一种对数据库中数据…...

鸿蒙开发(四)-低代码开发

鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时,采用简化开发流程和减少编码量的方式来提高开发效率。 1:开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示&#xff…...

BUU [网鼎杯 2020 半决赛]AliceWebsite

BUU [网鼎杯 2020 半决赛]AliceWebsite 开题&#xff1a; hint附件是源码。在index.php中有一个毫无过滤的本地文件包含 <?php $action (isset($_GET[action]) ? $_GET[action] : home.php); if (file_exists($action)) {include $action; } else {echo "File not…...

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界

揭秘LLM&#xff1a;语言模型新革命&#xff0c;智能交互的未来趋势 近年来&#xff0c;虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的&#xff0c;但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…...

Linux删除Mysql

//rpm包安装方式卸载 查包名&#xff1a;rpm -qa|grep -i mysql 删除命令&#xff1a;rpm -e –nodeps 包名//yum安装方式下载 1.查看已安装的mysql 命令&#xff1a;rpm -qa | grep -i mysql 2.卸载mysql 命令&#xff1a;yum remove mysql-community-server-5.6.36-2.el7.x86…...

CNN中常见的池化操作有哪些,作用是什么?

CNN中常见的池化操作有哪些&#xff0c;作用是什么&#xff1f; CNN中常见的池化操作只要是两种&#xff0c;平均值池化和最大值池化最大值池化常用于分类任务&#xff0c;是指在输入数据的局部区域内取最大值作为输出。最大池化的作用是降低特征图的尺寸&#xff0c;减少参数…...

能打印单据的软件,如进出库单据,物流快运单据,定制单据样式

能打印单据的软件&#xff0c;如进出库单据&#xff0c;物流快运单据&#xff0c;定制单据样式 一、前言 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、不同行业打印的单据不同 2、同一个行业打印的样式可能不同 3、有的行业已经印刷好了许多打印…...

uniapp列表进入动画

app列表入场动画 - DCloud 插件市场 列表入场动画https://ext.dcloud.net.cn/plugin?id16957...

FPGA TestBench编写学习

1 timescale 1.1 简介 timescale指令用于指定编译器在处理仿真时的时间单位和时间精度。这个指令通常在模块的顶层声明中使用&#xff0c;它告诉编译器和仿真器如何解释代码中的时间值。 timescale指令的语法如下&#xff1a; timescale <time_unit> <time_precis…...

Centos7 安装mongoDB

下载安装包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz 解压 tar -zxvf mongodb-linux-x86_64-3.2.12.tgz移动到指定位置 mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb在/usr/local/mongodb下创建文件夹 cd /usr/local/mongodb m…...

Redis冲冲冲——Redis持久化方式及其区别

目录 引出Redis持久化方式Redis入门1.Redis是什么&#xff1f;2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户注册验证码4.R…...

谷粒商城【成神路】-【10】——缓存

目录 &#x1f9c2;1.引入缓存的优势 &#x1f953;2.哪些数据适合放入缓存 &#x1f32d;3.使用redis作为缓存组件 &#x1f37f;4.redis存在的问题 &#x1f9c8;5.添加本地锁 &#x1f95e;6.添加分布式锁 &#x1f95a;7.整合redisson作为分布式锁 &#x1f697…...

Facebook、亚马逊账号如何养号?

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题&#xff0c;相信很多人也会关心在使用不同平台的时代理器的选择问题。比如&#xff0c;为什么最好…...

Milvus的相似度指标

官网&#xff1a;https://milvus.io/docs/metric.md版本: v2.3.x 在 Milvus 中&#xff0c;相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。下表展示了这些广泛使用的相似性指标如何与各种输入数据形式和 Milvus 索引相匹配。 一、浮…...

如何在unity中实现倒计时

public class showtime : MonoBehaviour {public TextMeshProUGUI Countdown;void Update(){if (Input.GetKeyDown(KeyCode.Space))//如果按下空格后开始倒计时{StartCoroutine(hahaha());}}IEnumerator hahaha()//声明了一个协程函数 hahaha{int time 10;Countdown.text tim…...

蓝桥杯简单题,公司名称

题目链接&#xff08;需要登录&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; bool lanqiao(string str,int len){ sort(str.begin(),str.end());//对str按照ascii排序if(str.find("Laainoq")s…...

【linux】02 :Linux基础命令

1.掌握linux系统的目录结构 linux只有一个顶级目录&#xff0c;称之为&#xff1a;根目录。 windows系统有多个顶级目录&#xff0c;即各个盘符。 2.linux路径的描述方式 /在Linux中的表示&#xff1a;出现在开头表示根目录&#xff0c;出现在后面表示层级关系。 3.什么是命…...

AOP切面编程,以及自定义注解实现切面

AOP切面编程 通知类型表达式重用表达式切面优先级使用注解开发&#xff0c;加上注解实现某些功能 简介 动态代理分为JDK动态代理和cglib动态代理当目标类有接口的情况使用JDK动态代理和cglib动态代理&#xff0c;没有接口时只能使用cglib动态代理JDK动态代理动态生成的代理类…...

C70600 CuNi10Fe1Mn铜合金深冲性能好

C70600 CuNi10Fe1Mn铜合金深冲性能好CW608N-R460、CW608N-H135、CuZn36Pb2As-R370、CuZn38Pb1-R460、CW607N-H120、CuZn38Pb1-H120、CW602N-H080、CW608N-H105、CuZn39Pb0.5-R460、CuZn39Pb0.5-H120、CW608N-H120、CuZn38Pb1-R470、CW607N-H080、CW607N-R470、CW607N-H105、CuZ…...

算法学习05:离散化、区间合并

算法学习05&#xff1a;离散化、区间合并 文章目录 算法学习05&#xff1a;离散化、区间合并前言需要记忆的模版&#xff1a;一、离散化1.例题&#xff1a;离散化 区间和&#xff1a;拓展: 二、区间合并&#xff08;贪心&#xff09;1.例题&#xff1a; 总结 前言 需要记忆的模…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...