首页 > 数据库 >mosh数据库——第八章

mosh数据库——第八章

时间:2024-06-02 16:57:56浏览次数:32  
标签:invoices 数据库 mosh 视图 client 第八章 invoice total id

1.创建视图

使用这个视图,所以我们不需要重新写这些查询

USE sql_invoicing;

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

我们可能需要我们的顶级客户名单,或者现在有销售名单的客户,而不是每次都写这个选择语句,并为每个查询稍微改变它,我们可以将此查询保存在视图中,以供在其他地方使用

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

因为我们在这里执行create view语句,所以该语句不会像select语句那样返回结果,而是创造了一个视图对象

让我在导航仪面板上展示给你看,在我们的 sql发票数据库中,我们需要扩展视图文件夹,但首先让我们现在刷新这个视图,让我们看看视图文件夹内部

使用视图就像使用一张表,视图功能非常强大,并且可以大大简化我们以后要用的查询

SELECT *
FROM sales_by_client

每当我们要使用客户销售额情况,就可以再使用视图,我们不必写再写这个查询,从头写这个选择语句

视图的作用就行一张虚拟表,但是要记住!!视图不储存数据,我们的数据储存在了表中。视图只是提供了一张虚拟基础表,这就是为什么我们称它们为视图。

CREATE VIEW clients_balance AS
SELECT
	c.client_id,
	c. name,
	SUM(invoice_total - payment_total) AS balance
FROM clients c
JOIN invoices i USING (client_id)
GROUP BY client_id, name

2.更改或删除视图

创建视图后,你可能会意识到您的查询有某个问题,因此你需要回去修改视图。

两种解决方法:一种方法是删除视图并重新创建,另一种方法是使用REPLACE关键字

删除并重建:

DROP VIEW sales_by_client -- 我们的视图就没了,再重新执行创建语句

 REPLACE 关键词:

CREATE OR REPLACE VIEW .....AS

CREATE OR REPLACE VIEW sales_by_client AS
SELECT
	c.client_id,
	c. name,
	SUM(invoice_total - payment_total) AS balance
FROM clients c
JOIN invoices i USING (client_id)
GROUP BY client_id, name

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

3.可更新视图

你已经看到我们可以在选择语句中使用视图,就像表格一样,而且我们也可以在插入,更新和删除子句中使用它们,但仅限于特定情况

如果视图没有DISTINCT关键字,或者任何聚合函数 比如MIN、MAX、SUM什么的,GROUP BY或者HAVING子句,这些通常会一起出现,因为大多数时候,我们使用聚合函数的话也要用到GROUP BY子句,最后还有UNION运算符。

DISTINCT
Aggregate Functions (MIN, MAX, SUM, AVG)
GROUP BY / HAVING
UNION

如果我们的视图没有以上任何东西,我们就说那个视图是可更新视图(我们可以在上面更新数据),所以我们可以在INSERT、UPDATE和DELETE语句中使用这类视图

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 - payment_total) > 0

我们可以在视图中删除记录 就像普通的表一样

DELETE FROM invoices_with_balance
WHERE invoice_id = 1

运行之后,回到视图刷新结果,发现id为1的发票经没有了,以下是更新

UPDATE invoices_with_balance
SET due_date = DATE_ADD(due_date, INTERVAL 2 DAY)
WHERE invoice_id = 2 -- 往后更新两天

我们还可以通过此视图插入新的发票,但这个有点棘手。因为,这只有在视图在基础表中拥有所有所需的列的情况下才有效,例如,如果我们的视图中没有这个发票日期列,我们无法在这个视图中插入任何行,因为我们的表不能接受插入日期列的空值(插入不能为空值)某一列必须全部有数值

4.WITH OPTION CHECK子句

通过视图更新或删除数据时,有些行可能会消失(这是视图的默认行为: 通过视图更新数据,修改的那行可能不会再留在视图里了)

想防止这种情况,不希望UPDATE或者DELETE语句将行从视图中删除

我们在选择语句的最后,加上WITH CHECK OPTION,这条子句会防止UPDATE或者DELETE语句将行从视图中删除(防止行消失

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 - payment_total) > 0
WITH CHECK OPTION

5.视图的其他优点

视图可以减小数据库设计改动的影响

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

我们可以使用视图限制基础表访问

视图可以帮助您简化查询,但也要记住,您可以使用它们在您的表上放置一个抽象层减少变化的影响,最后你可以用它们来保证数据安全

标签:invoices,数据库,mosh,视图,client,第八章,invoice,total,id
From: https://blog.csdn.net/Xiao_die888/article/details/139391886

相关文章

  • 如何在Spring Boot中配置MySQL数据库连接数
    1.如何在SpringBoot中配置MySQL数据库的连接数1.1主要配置在SpringBoot中配置MySQL数据库连接数通常涉及到两个主要的配置:(1)数据源配置:这通常是在application.properties或application.yml文件中完成的,用于设置数据源的基本参数,如URL、用户名、密码等。(2)连接池配置:SpringBoo......
  • oracle数据库文件
    oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件。1参数文件oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数。这些参数可以通过V$PARAMETER视图进行查询。oracle有两类参数文件,分别为pfile参数文件和spfile参数文件。o......
  • 适合技术小白学习的项目1863java在线视频网站系统 Myeclipse开发mysql数据库web结构ja
    一、源码特点java在线视频网站系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java在线视频......
  • 适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构ja
    一、源码特点   javaswing社团管理系统是一套完善的窗体设计系统,对理解SWINGjava编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。应用技术:java+mysql开发工具:Myeclipse8.5、jdk。二、功能介绍社团管理系统要满足以下几个方面的功能需求......
  • 【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
    2DataGuard原理解析2.1数据同步原理        DG的核心组件包括:主数据库:负责处理所有的写操作,并将这些操作记录在重做日志(RedoLogs)中。备用数据库:可以是物理备用数据库(PhysicalStandby)或逻辑备用数据库(LogicalStandby)。物理备用数据库通常是只读的,而逻辑备用......
  • Android基础-数据库
    在Android系统中,数据库扮演着至关重要的角色,它负责存储、管理和检索应用程序所需的数据。随着移动应用的日益复杂和功能的不断增加,对数据库的需求也日益提高。在Android中,有多种数据库管理系统和工具可供选择,其中最为常见和广泛使用的是SQLite数据库。下面将详细介绍Android系......
  • 数据库(入门)
    文章目录          一、数据库(DB)二、数据库管理系统(DBMS)三、SQL(结构化查询语言)四、三者的关系五、端口号(portnumber)一、数据库(DB)定义:按照一定格式存储数据的一些文件的组合。简单来说:存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有......
  • 使用Python连接到SQLite3数据库进行数据更新和删除
    SQLite3是一种轻量级的嵌入式关系型数据库管理系统,广泛应用于移动应用、嵌入式设备以及小型Web应用等场景。Python内置了对SQLite3数据库的支持,通过sqlite3模块,可以方便地连接、操作SQLite3数据库。在本文中,我们将学习如何使用Python连接到SQLite3数据库,并进行数据更新和删......
  • 【问题解决】MySQL恢复数据库报错Unknown command '\''.
    问题使用以下命令备份恢复数据库,恢复失败提示ERRORatline39595:Unknowncommand'\''.#备份数据库mysqldump-uusername-p--no-create-db-Rdatabasename>dump.sql#恢复数据库mysql-uusername-pdatabasename2<dump.sql问题原因及解法原因:中文字符的问题......
  • 数据库系统概论(超详解!!!)第十节 过程化SQL
    1.Transact-SQL概述SQL(StructureQueryLanguage的简称,即结构化查询语言)是被国际标准化组织(ISO)采纳的标准数据库语言,目前所有关系数据库管理系统都以SQL作为核心,在JAVA、VC++、VB、Delphi等程序设计语言中也可使用SQL,它是一种真正跨平台、跨产品的语言。2.Transact-SQL......