【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.rhkb.cn/news/207204.html

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

相关文章

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁:分布式锁应该具备哪些条件:分布式锁的业务场景: 分布式锁的实现方式有:基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…

Linux驱动开发——网络设备驱动(实战篇)

目录 四、 网络设备驱动实例 五、DM9000 网络设备驱动代码分析 六、NAPI 七、习题 书接上回: Linux驱动开发——网络设备驱动(理论篇)-CSDN博客 (没看过上面博客的同学,skb是linux对于网络套接字缓冲区的一个虚拟…

【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心

微服务(6) 文章目录 微服务(6)1. 统一配置管理1.1 在nacos中添加配置文件1.2 从微服务拉取配置 2. 配置热更新2.1 方式一2.2 方式二 3. 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3&am…

vue2 el-table 封装

vue2 el-table 封装 在 custom 文件夹下面创建 tableList.vue直接上代码&#xff08;代码比较多&#xff0c;复制可直接用&#xff09; <template><div class"mp-list"><el-tableref"multipleTable"class"mp-custom-table":dat…

Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】

deepin Linux 安装wkhtmltopdf 1、先从官网的链接里下载linux对应的包 wkhtmltopdf/wkhtmltopdf 下载需要的版本&#xff0c;推荐版本&#xff0c;新测有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解压下载的文件 解压后会有一个wkhtmltox文件夹 3…

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理&#xff1a;读入图像 2.2 图片处理&#xff1a;显示图像 2.3 图片处理&#xff1a;图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…

党建引领·和谐共建——赤岗街首届微型社区养老服务公益博览会开幕

服务咨询平台&#xff0c;让社区长者更便捷地了解到养老相关政策、信息。 本次活动由赤岗街公共卫生委员会、赤岗街道办事处、中国老龄事业发展基金会老年维权基金管理委员会主办&#xff0c;珠影社区居委会、广州市穗星社会工作服务中心、广州市盈泽信息科技有限公司承办&…

4/5G互操作 EPSFB讲解

今天我们来讲一下4/5G之间之间互操作&#xff0c;以及5G的EPSFB是基于什么实现的~ 目录 4/5G互操作 重选 切换 基于覆盖的切换 基于业务的切换 两个面试问题 想要加快4G切换5G的速度&#xff0c;调哪个参数怎么调高效&#xff1f; 想要减慢5G切换4G的速度调哪个参数怎…

项目计划阶段项目管理文档(风险管理、软件估计、立项、计划)

项目计划过程支撑文件&#xff1a; 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划书 软件开发全文档获取&#xff1a;点我获取 1、风险和机会管理表 2、软件估计书模板 3、立项通知 4、项目计划模板

Spring简单的存储和读取

前言 前面讲了spring的创建&#xff0c;现在说说关于Bean和五大类注解 一、Bean是什么&#xff1f; 在 Java 语⾔中对象也叫做 Bean&#xff0c;所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者&#xff0c;管理好几个开发团队&#xff0c;有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发&#xff0c;很感兴趣&#xff0c;便参…

kafka中的常见问题处理

文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者&#xff1a;1&#xff09;使⽤同步发送 2&…

C语言——有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j,row0,colum0,a[3][4]{{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};int maxa[0][0];for ( i 0; i < 3; i)//行&#xff08;row&#xff09;{for ( j 0; j < 4; j)//列&#xff08;colum&#xf…

Microsoft Remote Desktop高效、安全、稳定的远程办公解决方案

在今天的数字化时代&#xff0c;Remote Desktop远程办公已成为许多人的日常生活。无论你是因为工作需要&#xff0c;还是因为在家中需要访问公司服务器&#xff0c;微软远程连接软件都是一个理想的选择。 微软远程连接软件Remote Desktop是一款高效、安全、稳定的远程办公解决…

sublime Text使用

1、增加install 命令面板 工具(tool)->控制面板(command palette) -> 输入install ->安装第一个install package controller&#xff0c;以下安装过了&#xff0c;所以没展示 2、安装json格式化工具 点击install package&#xff0c;等几秒会进入控制面板&#xff0…

R语言30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

B 树和 B+树 的区别

文章目录 B 树和 B树 的区别 B 树和 B树 的区别 了解二叉树、AVL 树、B 树的概念 B 树和 B树的应用场景 B 树是一种多路平衡查找树&#xff0c;为了更形象的理解。 二叉树&#xff0c;每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 …

WSL2 docker GUI 界面

在 WSL2 docker 中运行GUI界面。 具体流程和远程显示Ubuntu界面类似&#xff0c;链接, 更简单一点&#xff0c; 少了 ssh 的部分。 安装好wsl2 和 docker wsl2 运行GUI程序&#xff0c;windows 会默认弹出窗口。 可以安装 gedit 测试一下 windows 下载并运行 Xlaunch. 运行 d…

(二) Windows 下 Sublime Text 3 安装离线插件 Anaconda

1 下载 Sublime Text 3 免安装版 Download - Sublime Text 2 下载 Package Control&#xff0c;放到 Sublime Text Build 3211\Data\Installed Packages 目录下。 Installation - Package Control 3 页面搜索 anaconda anaconda - Search - Package Control Anaconda - Pac…

python opencv -模板匹配

python opencv -模板匹配 模板匹配就是&#xff0c;我们现有一个模板和一个图片&#xff0c;然后&#xff0c;在这个图片中寻找和模板近似的部分。 在opencv 中主要通过cv2.matchTemplate这个函数去实现。 下面我们先看一下&#xff0c;模板图片和需要匹配的图片&#xff1a…