MySQL数据库学习(5)

news2025/1/12 1:04:44

一、概念
视图是数据库中常用对象之一,它的内容是数据库部分数据或以聚合等方式重构的数据。
只存放视图的定义,不存放数据。不存储数据,所以视图是一个虚表。
因为数据存在基本表中,基本表的数据发生变化,视图查询的结果集会随之改变。
视图的数据来源可以是一个表,也可以是多个表。定义好的视图可以和基本表一样进行查询、修改、更新和删除等操作。
视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。
1.视图并不同于数据表,它们的区别在于以下几点:
视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
视图的建立和删除只影响视图本身,不影响对应的基本表。
2.视图的优点:
1) 定制用户数据,聚焦特定的数据
2) 简化数据操作
3) 提高数据的安全性
4) 共享所需数据
5) 更改数据格式
6) 重用 SQL 语句
3.使用视图注意事项:
创建视图需要足够的访问权限
1)创建视图的数目没有限制
2)视图可以嵌套,即从其他视图中检索数据的查询来创建视图
3)视图不能索引,也不能有关联的触发器、默认值或规则
4)视图可以和表一起使用。
5)视图不包含数据,所以每次使用视图时,都必须执行查询中所需的任何一个检索操作。如果用多个连接和过滤条件创建了复杂的视图或嵌套了视图,可能会发现系统运行性能下降得十分严重。因此,在部署大量视图应用时,应该进行系统测试。
二、创建视图
创建视图语法格式
CREATE VIEW <视图名> AS <SELECT语句>
<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
<SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。
对于创建视图中的 SELECT 语句的指定存在以下限制:
用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。
SELECT 语句不能引用系统或用户变量。
SELECT 语句不能包含 FROM 子句中的子查询。
SELECT 语句不能引用预处理语句参数。

 

 

三、查询视图
视图一经定义之后,就可以如同查询数据表一样,使用 SELECT语句查询视图中的数据,语法和查询基础表的数据一样。
视图用于查询主要应用在以下几个方面:
1)使用视图重新格式化检索出的数据
2)使用视图简化复杂的表连接
3)使用视图过滤数据
查看视图语法如下:DESCRIBE 视图名;
使用视图查看视图的定义:

注意:DESCRIBE 一般情况下可以简写成 DESC,输入这个命令的执行结果和输入 DESCRIBE 是一样的。
查看视图的字段信息和查看视图的详细信息:

所有视图的定义都是存储在 information_schema 数据库下的 views 表中,也可以在这个表中查看所有视图的详细信息,SQL 语句如下:
SELECT * FROM information_schema.views;
不过,通常情况下都是使用 SHOW CREATE VIEW 语句。
四、修改视图
修改视图是指修改 MySQL数据库中存在的视图,当基本表的某些字段发生变化时,可以通过修改视图来保持与基本表的一致性。
1.语法
语法格式:ALTER VIEW <视图名> AS <SELECT语句>
<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
<SELECT 语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。
2.修改视图内容
视图是基于有实际数据基表的一个虚拟表,插入、修改和删除操作更新视图中的数据,实质上是在更新视图所引用的基本表的数据。
注意:对视图的修改就是对基本表的修改,因此在修改时,要满足基本表的数据定义。
可更新的视图:视图中的行和基本表的行之间必须具有一对一的关系
不可更新的视图:视图包含以下结构中的任何一种都不可更新
聚合函数 SUM()、MIN()、MAX()、COUNT()等
DISTINCT 关键字
GROUP BY 子句
HAVING 子句
UNION 或 UNION ALL 运算符
位于选择列表中的子查询
FROM 子句中的不可更新视图或包含多个表
WHERE 子句中的子查询,引用 FROM 子句中的表
ALGORITHM 选项为 TEMPTABLE(使用临时表总会使视图成为不可更新的)的时候
修改视图内容:

更新视图内容:

修改视图名称:
修改视图的名称可以先将视图删除,然后按照相同的定义语句进行视图的创建,并命名为新的视图名称。
五、删除视图
删除视图是指删除 MySQL数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。
语法格式:DROP VIEW <视图名1> [ , <视图名2> …]
<视图名> 指定要删除的视图名。
DROP VIEW语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。

 

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

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

相关文章

MySQL集群解决方案(1):MySQL数据库的集群方案

1、系统架构存在的问题 在我们的系统架构中&#xff0c;DBserver方面我们只是使用了单节点服务&#xff0c;如果面对大并发&#xff0c;海量数据的存储&#xff0c;显然单节点的系统架构将存在很严重的问题&#xff0c;所以接下来&#xff0c;我们将实现MySQL的集群&#xff0c…

双12有哪些宝藏数码好物值得入手、这份超值数码清单收藏好

作为一年一度的电商大促狂欢日&#xff0c;不知道各位小伙伴儿有没有入手哪些心仪的数码产品呢&#xff1f;如果确实不知道要入啥好&#xff0c;不妨一起来看看我为各位精心准备的这份最值得入手的数码产品清单吧&#xff0c;这份清单的产品最主要突出的是颜值、产品实力还有性…

anaconda使用arcpy库

anaconda使用Arcpy环境1. 查看Arcgis版本2. 创建虚拟环境3. 将anaconda环境放入jupyter中1. 查看Arcgis版本 找到Arcgis安装python路径【电脑需要下载Arcgis】点击python.exe&#xff0c;查看python版本 2. 创建虚拟环境 管理员身份打开Anaconda PowerShell Prompt 查看ana…

安卓玩机搞机技巧综合资源-----“另类更新“偷渡”操作步骤 无需解锁bl 无需内侧用户【十三】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

如何排查CPU 100%的应用

一台机器&#xff0c;CPU100%&#xff0c;如何找到相关服务&#xff0c;如何定位问题代码&#xff0c;今天简单分享下思路。 简要步骤如下&#xff1a; 找到最耗CPU的进程&#xff1b;找到最耗CPU的线程&#xff1b;查看堆栈&#xff0c;定位线程在干嘛&#xff0c;定位对应代码…

linux安装docker教程+mysql安装

一、linux安装docker教程 第一步、关闭SELINUX服务 修改文件后的重启linux&#xff0c;重启命令为&#xff1a;reboot 注意此处虚拟机里修改重启无法启动linux系统成功&#xff0c;处理方法&#xff1a; 1、重启Linux按e进入系统启动项修改参数 2、在linux16的行位添加 seli…

k8s编程operator——(4) kubebuilder controller-runtime

文章目录1、KubeBuilder使用1.1 下载1.2 使用2、controller-runtime参考资料&#xff1a;https://book.kubebuilder.io/k8s编程operator系列&#xff1a; k8s编程operator——(1) client-go基础部分 k8s编程operator——(2) client-go中的informer k8s编程operator——(3) 自定…

【PostgreSQL的wal_buffers】

1、什么是wal buffer? wal buffer是预写日志(wal)缓冲区 2、wal buffer的作用是什么 用于还未写入磁盘的 WAL 数据的共享内存。 每次变更事务提交时候,需要将变更事务日志落盘&#xff0c;在PG中为了提高性能&#xff0c;并非采用实时flush到磁盘,而是在PG中提供XLog Buff…

DFS学习

一、DFS 1、简介 最初听到DFS还以为是深度优先遍历&#xff0c;实际上是分布式文件存储服务(Distributed file system)。 FastDFS是一套分布式文件存储服务&#xff0c;Titans将FastDFS提供的接口进行了封装&#xff0c;屏蔽了一些无需关注的操作细节&#xff0c;让用户可以更…

Java基础:Lambda表达式

1. 函数式编程思想概述 在数学中&#xff0c;函数就是有输入量、输出量的一套计算方案&#xff0c;也就是“拿什么东西做什么事情”。相对而言&#xff0c;面向对象过分强调“必须通过对象的形式来做事情”&#xff0c;而函数式思想则尽量忽略面向对象的复杂语法——强调做什么…

《Fluent Python》笔记 | 函数对象和装饰器

在Python中函数是对象&#xff0c;本质是function类的实例。同样函数对象也是“一等对象”&#xff0c;即满足以下条件&#xff1a; 在运行时创建能赋值给变量或数据结构中的元素能作为参数传给函数能作为函数的返回结果 函数对象的__doc__属性用于生成对象的帮助文本。 接受…

【避坑指南】快准狠!一键采购电子元器件(文末优惠券)

在采购元器件的过程中&#xff0c;经常会出现一些或这或那的情况&#xff0c;比如遇到假货问题、不具备专业知识、工作经验不够丰富、采购型号错误等等&#xff0c;因此采购下单如赌注&#xff0c;每个订单都下得心惊肉跳。 那么有哪些坑是可以避开的&#xff0c;又有什么方法可…

AI大模型加持,生成式搜索来了!

梦晨 发自 凹非寺量子位 | 公众号 QbitAI最近有两件事&#xff0c;让搜索引擎重回聚光灯下。百度发布“文心百中”&#xff0c;用AI大模型技术驱动的产业级搜索系统。构建企业内部搜索引擎的人力成本减少90%以上&#xff0c;同时只需要极低数据。几乎同一时间&#xff0c;OpenA…

算法---DFS和BFS

一 : 什么是DFS和BFS? 转载自 : 什么是DFS和BFS? 简介&#xff1a; 深度优先遍历&#xff08;Depth First Search, 简称 DFS&#xff09; 与广度优先遍历&#xff08;Breath First Search&#xff09;是图论中两种非常重要的算法&#xff0c;生产上广泛用于拓扑排序&#xf…

软考高级信息系统项目管理师如何备考?

从以下两个方面&#xff1a; 1.首先分析一下高项考试的各个科目&#xff1b; 2.如何备考高项&#xff1f; 高项考试有三个科目&#xff1a; 综合知识&#xff0c;案例分析&#xff0c;和论文。 一、综合知识 信息系统项目管理师上午综合知识科目范围广&#xff0c;知识点非…

【差分进化算法】基于适应度-距离-平衡的自适应引导差分进化 (FDB-AGDE) 算法附matlab代码

​✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法…

java工作流开源框架可以提高工作效率吗?

要想回答这个问题&#xff0c;就需要了解什么是java工作流开源框架&#xff0c;以及java工作流开源框架的主要特点是什么。随着大数据时代的拓展发展&#xff0c;低代码开发平台已经在数字化管理时代中深受欢迎&#xff0c;是做好数据管理和提升企业数字化发展步伐的重要工具。…

医疗机构 IT 管理员保护患者数据和隐私的 3 项必做之事

自疫情开始以来&#xff0c;医疗机构的信息存储与管理正面临着巨大的考验。患者的健康史&#xff0c;包括所有治疗、程序、处方、实验室测试和扫描报告&#xff0c;都以电子健康记录 (EHR) 的形式存储。尽管 EHR 更能提高患者病例的准确性&#xff0c;并帮助医生跟踪患者的医疗…

网络三层交换机部署实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿…

排查cpu飚高问题-两种方案

cpu 飚高原因 频繁创建线程 线程内进行频繁计算 模拟代码 SpringBootApplicationEnableSchedulingpublic class CrawlBigDataApplication {public static void main(String[] args) { /*19*/ SpringApplication.run(CrawlBigDataApplication.class, (String[])args)…