【MySQL学习笔记】MySQL视图View
视图View
- 1、视图的基础语法
- 2、检查选项
- 3、视图的更新
- 4、视图的作用
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
通俗的讲,视图只保存了查询的 SQL 逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条 SQL 查询语句上。
1、视图的基础语法
创建:
-- 创建视图
create [or replace] view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];
查询:
-- 查看创建视图语句
show create view 视图名称;-- 查看视图数据
select * from 视图名称 [where ...];
修改:
-- 方式一:和创建视图语法相同,但是主要关注的是 or replace 部分,因为是要修改
create or replace view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];-- 方式二
alter view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option];
删除:
drop view [if exists] 视图名称 [, 视图名称...];
2、检查选项
检查选项有两种:cascaded 和 local。下面通过一个案例来分析检查选项的用处。
假设现在有一个 user 表。里面有两个字段,id 和 name。存储了三条数据
id----------name
1-----------张三
2-----------李四
3-----------王五
现在给这个表创建一个视图
-- 给表 user 创建一个视图,select 语句为查询 id < 10 的所有数据
create view user_v as select * from user where id < 10;
这时操作 user_v 视图,插入一条 id 为4的数据。
-- 插入一条 id 为4的数据
insert into user_v values(4, '李六');
-- 再通过查询语句查询视图 user_v 数据,能够查询到所有数据
select * from user_v;
-- 通过查询语句查询表 user 的数据,发现数据也成功插入到表中
select * from user;
再向视图 user_v 中插入一条 id 为11的数据。
-- 向视图 user_v 插入一条 id 为11的数据
insert into user_v values(11, '王麻子');
-- 通过查询语句查询视图 user_v 数据,发现查询不到 id 为11的数据。
-- 这是因为在创建视图 user_v 时,select 语句指定了过滤条件 where id < 10,因此,id 为11的数据并不会出现在视图 user_v 中
select * from user_v;
-- 但是数据还是会成功插入到 user 表中。通过查询语句可以查看到
select * from user;
通过上面的案例可以发现,通过向视图插入数据,发现视图中没有成功插入,但是原表中成功插入了。为了避免这种现象,MySQL 在创建视图时提供了 cascaded 检查选项,可以将创建视图的 sql 修改为:
create view user_v as select * from user where id < 10 with cascaded check option;
在上面的案例中,检查选项 cascaded 的作用是,在向视图插入数据时,满足创建视图条件的数据才能被成功插入,而不满足条件的数据插入时会报错。在上述案例中创建的视图只允许 id < 10 的数据,增加了检查选项 cascaded 后,再向视图插入 id 大于10的数据则会报错,无法成功插入。
视图检查选项的作用:
当使用 with check option 子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如插入、更新、删除,以使其符合视图的定义。MySQL 允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围, MySQL 提供了两个选项:cascaded 和 local,默认值为 cascaded。
cascaded:当前视图及其依赖的视图的创建条件都要满足
-- 创建视图 user_1,此视图没加检查选项,那么在操作该视图时,是不会去检查是否满足 id < 20
create view user_1 as select * from user where id < 20;
-- 基于视图 user_1 再创建一个视图 user-2
-- 给视图 user_2 增加了检查选项 cascaded。此时再要操作视图 user_2,不仅要满足 user_2 的创建条件,还要满足 user_1 的创建条件
create view user_2 as select * from user_1 where id > 10 with cascaded check option;
local:需满足当前视图的创建条件,同时会递归查看所依赖的视图是否有检查选项,如果有检查选项也需要满足依赖的视图的创建条件,如果没有检查选项则忽略。
3、视图的更新
要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:
- 聚合函数或窗口函数(sum()、min()、max()、count()等)
- distinct
- group by
- having
- union 或者 union all
4、视图的作用
- 简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后得操作每次指定全部的条件。 - 安全
数据库可以授权、但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。 - 数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响。
相关文章:
【MySQL学习笔记】MySQL视图View
视图View 1、视图的基础语法2、检查选项3、视图的更新4、视图的作用 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲&…...
从玩具到工业控制--51单片机的跨界传奇【2】
咱们在上一篇博客里面讲解了什么是单片机《单片机入门》,让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识,顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话,可以看看博主的C语言专栏哟ÿ…...
【Redis】初识Redis
目录 Redis简介 Redis在内存中存储数据 Redis数据库中的应用 Redis缓存中的应用 Redis消息中间件 尾言 Redis简介 如下是Redis官网中,对Redis的一段描述 在这段描述中,我们提取如下关键要点: Redis主要用于在内存中存储数据Redis可…...
docker虚拟机平台未启用问题
在终端中输入如下代码,重启电脑即可 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 对于Docker Desktop - Unexpected WSL error问题 参考链接 解决WSL2与docker冲突问题...
《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题
《零基础Go语言算法实战》 【题目 2-22】Go 调度器优先调度问题 下面代码的输出是什么?请说明原因。 package main import ( "fmt" "runtime" "sync" ) func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10)…...
关于使用FastGPT 摸索的QA
近期在通过fastGPT,创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上,可以定义业务逻辑,满足输出对话之外的需求。 在最近3个月来的摸索和实践中,一些基于经验的小问题点(自己也常常…...
关于H5复制ios没有效果
问题场景:今天遇到这样一个问题,需要从后端接口获取到的值进行复制,且不能提现调用获取值,因为是一个数据列表,每个列表元素需要当场点击调用接口获取值进行复制,本来以为很简单的一个需求,当做…...
【STM32-学习笔记-3-】TIM定时器
文章目录 TIM定时器Ⅰ、TIM定时器函数Ⅱ、TIM_TimeBaseInitTypeDef结构体参数①、TIM_ClockDivision②、TIM_CounterMode③、TIM_Period④、TIM_Prescaler⑤、TIM_RepetitionCounter Ⅱ、定时器配置Ⅲ、定时器外部中断NVIC配置 TIM定时器 Ⅰ、TIM定时器函数 // 将定时器寄存器…...
EMS专题 | 守护数据安全:数据中心和服务器机房环境温湿度监测
您需要服务器机房温度监测解决方案吗? 服务器机房是企业中用于存储、管理和维护服务器及其相关组件的设施。服务器机房通常位于数据中心内,是一个专门设计的物理环境,旨在确保服务器的稳定运行和数据的安全性。服务器机房主要起到存储和管理数…...
Vue JavaScript 小写数字金额转换成大写汉字(附编程思路)
一、编程思路(本案例只考虑9999万亿以内的数字转换,相信这个金额对于人民币来说已经足够庞大了,超过此数值的金额不保证转换汉字的准确性,且最多精确到小数点后四位): 1、将示例(不管是…...
【自动化测试】—— Appium安装配置保姆教程(图文详解)
目录 一. 环境准备 二. JDK安装 1. 下载JDK 2. 安装JDK 3. 配置环境 4. 验证安装 三. Android SDK安装 1. 下载Android SDK 2. 安装Android SDK 3. 安装工具 4. 配置环境 5. 验证安装 四. NodeJS安装 1. 下载NodeJS 2. 安装NodeJS 3. 验证安装 4. 安装淘宝镜像…...
贪心算法详细讲解(沉淀中)
文章目录 1. 什么是贪心算法?(贪婪鼠目寸光)经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法?(贪婪鼠目寸光) 贪心策略&a…...
RabbitMQ中有哪几种交换机类型?
大家好,我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型?】面试题。希望对大家有帮助; RabbitMQ中有哪几种交换机类型? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,交换机…...
STM32特殊功能引脚详解文章·STM32特殊功能引脚能当作GPIO使用嘛详解!!!
目录 STM32特殊功能引脚 使用STM32特殊功能引脚函数 禁止搬运,仅供学习,编写不易,感谢理解!!! STM32特殊功能引脚 本篇详解文章仅以STM32F103C8T6芯片来讲解,STM32芯片除了普通的GPIO引脚以外…...
Qt QComboBox的QSS美化
美化效果 QSS设置 /*QComboBox风格设置*/ QComboBox#comboBox_1 { border:2px solid #f3f3f3;/*设置边框线宽*/ background-color:rgb(237, 242, 255);/*背景颜色*/ border-radius:5px;/*圆角*/ padding: 1px 2px 1px 2px;/*针对组合框中的文本内容*/ min-width:2em;/*组合框…...
计算机视觉算法实战——实时车辆检测和分类(主页有相关源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域介绍✨✨ 实时车辆检测和分类是计算机视觉中的一个重要应用领域,旨在从视频流或…...
what?ngify 比 axios 更好用,更强大?
文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…...
安装虚拟机VMware遇到的问题
问题1:进入如下界面,不知道如何操作 解决办法 键盘⬇️,选择“Reset the system”回车 问题2:系统存放位置我给放在了VMware安装目录,具体D:\software\VMware\Windows安装不行 解决办法:D:\software\virt…...
通过ESP32和INMP441麦克风模块实现音频数据传递
在现代物联网(IoT)项目中,音频数据的采集与传输成为了一个热门的应用领域。通过结合ESP32开发板和INMP441麦克风模块,我们可以实现一个低成本、高效率的音频数据传输系统。本文将详细介绍如何使用这两种硬件组件来构建和测试音频传…...
Vue中nextTick实现原理
源码实现思路(面试高分回答) 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前: 存在一个 callbacks 数组,用于存放所有的 cb 回调函数。存在一个 flushCallbac…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
