【MySQL】视图:简化查询

文章目录

  • create view … as创建视图
  • 更改或删除视图
    • drop view 删除视图
    • replace关键字:更改视图
  • 可更新视图
  • with check option子句:防止行被删除
  • 视图的其他优点
    • 简化查询
    • 减小数据库设计改动的影响
    • 使用视图限制基础表访问

create view … as创建视图

  • 把常用的一段查询保存为视图,以供在很多地方使用。可以大大简化常用到的查询
  • 把下面这段查询保存为一个视图(作用像一张虚拟表),在后续用到这段查询时,可以直接使用这个视图
    • 可以把这个视图和任何有客户id列的表做连接
    • 可以使用where、order by等
  • 注意:视图不存储数据,数据存储在表中
create view sales_by_client as
select c.client_id,c.name,sum(invoice_total) as total_sales
from clients c
join invoices i using (client_id)
group by client_id, name;select *
from sales_by_client
order by total_sales desc

运行结果:返回了这个视图
在这里插入图片描述

  • 练习:查询每个客户的结余(发票总额 - 支付总额),将此查询创建为视图
create view see_balance as
select client_id,name,sum(invoice_total) - sum(payment_total) as balance
from invoices
join clients using (client_id)
group by client_id, name

在这里插入图片描述

更改或删除视图

  • 最好把视图储存在SQL文件中,并放入源码控制。

drop view 删除视图

drop view sales_by_client

replace关键字:更改视图

  • creat or replace view,没有视图的时候就创建,有视图了就更改
create or replace view sales_by_client as
select c.client_id,c.name,sum(invoice_total) as total_sales
from clients cjoin invoices i using (client_id)
group by client_id, name;
  • 如果找不到视图的源码,可以在modify view中对视图做修改
    在这里插入图片描述

可更新视图

  • 如果视图中没有以下内容,这个视图就是可更新视图。
    • distinct
    • 聚合函数,如min、max、sum等
    • group by 或 having
    • union
  • 可更新视图:可以在上面更新数据,所以可以在以下语句中使用可更新视图
    • insert
    • update
    • delete
  • 创建一个有结余列且结余>0的视图
    • 因为这个视图没有上边提到的那些内容,所以这个视图是可更新视图。
    • 可以删除这个视图中id为1的发票。
    • 可以更新id为2的发票的时间,让天数加2
create or replace view invoices_with_balance as
select invoice_id,number,client_id,invoice_total,payment_total,invoice_total - payment_total as balance,invoice_date,due_date,payment_date
from invoices
where (invoice_total - invoices.payment_total) > 0
delete from invoices_with_balance
where invoice_id = 1
update invoices_with_balance
set due_date = date_add(due_date, interval 2 day)
where invoice_id = 2

with check option子句:防止行被删除

  • 更新视图,让id为2号的支付和总额相等,也就是结余=0。执行后发现视图中id为2号的数据被删除了。
update invoices_with_balance
set payment_total = invoice_total
where invoice_id = 2
  • 如果不希望update或delete语句将某行从视图中删除,就在创建视图的代码最后面写 with check option
    • 此时让id为3号的支付和总额相等,也就是结余=0时,执行代码会报错,显示”检查视图失败“
create or replace view invoices_with_balance as
select invoice_id,number,client_id,invoice_total,payment_total,invoice_total - payment_total as balance,invoice_date,due_date,payment_date
from invoices
where (invoice_total - invoices.payment_total) > 0
with check optionupdate invoices_with_balance
set payment_total = invoice_total
where invoice_id = 3;

运行结果:报错,无法删除id为3的行。
在这里插入图片描述

视图的其他优点

简化查询

减小数据库设计改动的影响

  • 视图为数据库提供了一种抽象化,这种抽象化减少了变动带来的影响。

  • 如果所有的查询都是基于视图,不会受基础表改动的影响

使用视图限制基础表访问

  • 可加强数据安全性

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

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

相关文章

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意,普通空类也会占用 1 字节大小,因为普通空类可以实例化对象。 而 抽象空类占 4 字节(32 位机中),因为抽象空类中含有虚指针(含有虚函数的非抽象空类同理&am…

3D点云目标检测:VoxelNex解读

VoxelNext 通用检测器 vs VoxelNext一、3D稀疏卷积模块1.1、额外的两次下采样消融实验结果代码 1.2、稀疏体素删减消融实验:代码 二、稀疏体素高度压缩代码 三、稀疏预测head 通用检测器 vs VoxelNext 一、3D稀疏卷积模块 1.1、额外的两次下采样 使用通用的3D spa…

保姆级大猿人中控系统搭建教程/话费充值系统/支持代理分销(12.1更新下)

前言 csdn上面是多久没更新啦,没啥值得写的,有也懒得写~ 写文章依然是那么飘逸,哈哈~ 最近看上了一款系统还是挺不错的,直接对接话费、垫费、燃气api充值的系统,还可以,市面上主流的话费中控系统&#xf…

最新发布SPAB模块,YOLOv5改进之SPAB

目录 一、原理 二、代码 三、应用到YOLOv5 一、原理 单幅图像超分辨率(SISR)是低分辨率计算机视觉中的一项重要任务,旨在从低分辨率图像中重建高分辨率图像。传统的注意机制虽然显著提高了SISR的性能,但往往导致网络结构复杂、参数过多,导致推理速度慢

python爬虫基础知识

使用python进行网络爬虫开发之前,我们要对什么是浏览器、什么HTML,HTML构成。请求URL的方法都有一个大概了解才能更清晰的了解如何进行数据爬取。 什么是浏览器? 网页浏览器,简称为浏览器,是一种用于检索并展示万维网信息资源的…

【力扣 面试题02.07链表相交】一种思路极其清晰的解法

力扣一单简单题,看完大佬的题解真是佩服得五体投地! 虽是一道简单题,当我吭哧吭哧写了几十行后,看到大佬仅仅几行直接秒掉,只能说算法的本质还是数学,数学逻辑思维真是太重要了,有时候真得慢慢去…

操作系统进程与线程篇

目录 一、进程 1.1、进程状态 1.2、进程的控制结构 1.3、进程的控制 1.4、进程的上下文切换 二、线程 2.1.线程是什么 2.2、线程与进程的比较 2.3、线程的上下文切换 2.4、线程的实现 2.5、轻量级线程 三、进程间的通信方式 3.1、管道 3.2、消息队列 3.3、共享内…

代码人生,养生有道

导言: 在代码的征程中,我们往往忽略了自身的身体健康。这次的活动,我们不妨一同探讨一下,作为程序员,如何通过科学的养生方式,告别亚健康,迎接更健康、更充实的人生。 工作中的挑战 繁忙的工…

Node.js与npm的准备与操作

1.下载 Node.js官网:Node.jsNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en 打开后的界面如下: LTS(Long Term Support):长期支持版,稳定版 Current&am…

键入网址到网页显示,期间发生了什么?(计算机网络)

一、浏览器首先会对URL进行解析 下面以http://www.server.com/dir1/file1.html为例 当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 对URL进行解析之后,浏览器确定了 Web 服务器和文件名&am…

算法——动态规划

动态规划:有很多重叠子问题,每一个状态一定是由上一个状态推导出来的 贪心:没有状态推导,而是从局部直接选最优的 动规五步曲: 确定dp数组(dp table)以及下标的含义 确定递推公式(容…

分享89个清新唯美PPT,总有一款适合您

分享89个清新唯美PPT,总有一款适合您 89个清新唯美PPT下载链接:https://pan.baidu.com/s/14DAA9jvVmlQZ_FJ4DNy9Rw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整…

Java Class文件结构细节最全解读

官方文档位置:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html Class 类的本质 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并不一定以磁盘文件的形式存在。Class 文件是一组以8位字…

解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点

解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点 1,蓝屏显示问题1.1,蓝屏1,清楚显示1.2,蓝屏2,模糊显示 2,排除故障问题3,解决蓝屏的有效方法 1&a…

Mac电脑音乐标签管理 Yate 激活最新 for Mac

Yate是一款非常实用的音频编辑和标记软件,它提供了丰富的功能和工具来帮助用户编辑、整理和管理音频文件。无论是在音乐收藏管理、DJ和音乐制作方面,还是在其他需要处理大量音频文件的领域,Yate都是非常值得推荐的工具。 Yate for Mac功能特…

(2)(2.2) Lightware SF45/B(350度)

文章目录 前言 1 安装SF45/B 2 连接自动驾驶仪 3 通过地面站进行配置 4 参数说明 前言 Lightware SF45/B 激光雷达(Lightware SF45/B lidar)是一种小型扫描激光雷达(重约 50g),扫描度可达 350 度,扫描范围 50m。 1 安装SF45…

安全风险综合监测预警平台建设指南(2023 版)》正式发布,汉威科技方案领跑行业

11月24日,国务院安委会办公室印发《城市安全风险综合监测预警平台建设指南(2023版)》(以下简称“指南”),引发行业密切关注。 据悉,“指南”在总结前期18 个试点城市(区)…

一文回顾 Polkadot 跨链技术演进,了解 Polkadot 2.0 的未来

Polkadot 的起源、完善和上线过程经历了怎样的技术迭新与路线升级?深入把握 Polkadot 技术模型与生态合约才能让我们更好地深耕 Polkadot 生态。 11 月 25 日晚上,Substrate Saturday 第 19 期活动如期举行,Parity 工程师 Suvi Dong、Kaicha…

MJPG-streamer方案实现物联网视频监控

目录 前言 一、JPEG,MJPG格式简介 JPEG MJPG MJPG的优点 MJPG的缺点 二、软硬件准备 三、编译MJPG-streamer 四、运行MJPG-streamer 五、其它常见用法 六、MJPG-streamer 程序框架 七、源码下载 前言 最近想做一个安防相关的项目,所以跟着韦…

RubyMine 2023 年下载、安装、使用教程,详细图解

大家好,今天为大家带来的是RubyMine 2023 年下载、安装、使用教程,详细图解。 文章目录 1 RubyMine 简介2 RubyMine 下载、安装教程RubyMine 下载RubyMine 安装 3 RubyMine 汉化4. 常用快捷键一级必会二级进阶 1 RubyMine 简介 RubyMine 是一个为 Ruby …