【数据库——MySQL】(10)视图和索引

news2024/12/28 16:31:07

目录

  • 1. 视图
    • 1.1 创建视图
    • 1.2 查询视图
  • 2. 索引
    • 2.1 索引的分类
    • 2.2 索引的建立
  • 参考书籍

1. 视图

1.1 创建视图

基础语法:

CREATE [OR REPLACE] VIEW 视图名[(列名表)]
	AS
		SELECT语句
	[WITH CHECK OPTION]

说明:

  1. 在默认情况下,将在当前数据库创建新视图,否则采用“数据库名.视图名”的形式。视图名必须遵循标识符命名规则,不能与已有的表或视图同名。如果创建视图前不确定是否已有同名视图存在,可加上“OR REPLACE替换可能存在的同名视图。若视图列名与 SELECT 语句输出项名相同,则可以省略列名表
  2. SELECT 语句是用来创建视图的查询语句,可在其中查询已经存在的一个或以上的表或视图
  3. WITH CHECK OPTION :指出在可更新视图上所进行的修改都要符合 SELECT 语句所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据
  4. 如果与视图相关联的表或视图被删除,则该视图将不能再使用。

【例】创建视图显示所有逾期未归还的借阅信息(包括借阅人姓名,借阅人类别,书名,借出日期,应归还日期,逾期时长)。

这里还是用的 library 数据库,数据库的获取见前面的文章,除非文章例子特别说明使用其它的数据库之外,默认都是使用 library 数据库,后续将不再对此进行说明~

use library;
# 删除视图
drop view if exists Overdue_view;
# 创建视图
CREATE VIEW `library`.`Overdue_view` AS SELECT
	borrower.`name` AS 借阅人姓名, 
	borrower.category AS 借阅人类别, 
	book.`name` AS 书名, 
	information.leadDate AS 借出日期, 
	information.returnDate AS 应归还日期,
	TO_DAYS(NOW()) - TO_DAYS(information.returnDate) AS '逾期时长(天)'
FROM
	book
	INNER JOIN
	information
	ON 
		book.id = information.bookid
	INNER JOIN
	borrower
	ON 
		information.borrowerid = borrower.id
WHERE returnDateReality IS NULL AND TO_DAYS(NOW()) - TO_DAYS(information.returnDate) > 0;

视图如下:

在这里插入图片描述

说明:

  1. 因为视图采用 SELECT 输出项作为列名,所以视图名后没有定义列名。
  2. 对定义的视图查询所有记录和输出所有项,效果与执行定义的查询语句效果相同。输出项名称与定义该视图时 SELECT 输出项名称相同。

1.2 查询视图

【例】查询逾期未归还天数超过 220 天的借阅人信息。

SELECT id, `name`, category, tel, email FROM borrower
	WHERE `name` IN 
	(
		SELECT `借阅人姓名` 
			FROM overdue_view
			WHERE `逾期时长(天)` > 220
	);

在这里插入图片描述

由于逾期时长是当前时间减去借书时间得到的,所以大家运行的结果可能会比我的结果多出几条记录!

视图的插入、修改以及删除和表的操作类似,基本上只是将关键字 DATABASE 改为关键字 VIEW,关键字不区分大小写,但是建议关键字都使用大写,便于代码的查阅!

2. 索引

索引相当于书籍的目录,方便 MySQL 快速查找数据,从而提高效率!但是注意最好在数据量大的时候才建立索引,而要经常修改的表则不建议建立索引

2.1 索引的分类

MySQL 8.0 支持的主要索引有如下几种。

  1. 普通索引INDEX)。这是最基本的索引类型,索引列不一定唯一和非空,可以在任何数据类型的列上创建。
  2. 唯一性索引UNIQUE)。一个表索引列的所有值不能重复,即必须是唯一的。
  3. 主键索引PRIMARY KEY)。主键索引是一种特殊的唯一性非空索引,一般在创建表时通过“PRIMARY KEY”关键字指定,每个表只能有一个主键索引。
  4. 多列索引。可在多个列上创建的索引,它同时关联表的多个列,但查询时只有在条件中使用多列索引的第一列,多列索引才会真正发挥作用。
  5. 全文索引FULLTEXT)。在定义这种索引的列上支持值的全文检索,允许在这些索引列中插入重复值和空值。全文索引只能在 charvarchartext 类型的列上创建。
  6. 空间索引SPATIAL)。这是 MySQL 支持的专门针对空间数据类型列的索引,空间类型列的值不能为空。

2.2 索引的建立

我建议大家用可视化界面,如 Navicat 来创建索引(方便),因此代码创建语句这里就不展示了。

在这里插入图片描述

可以在左侧的表上右键选择设计表,即可在索引栏里面创建、修改、删除索引了~

JSON 数据索引空间数据索引这里不进行介绍,感兴趣的同学可以阅读相关书籍。

参考书籍

《MySQL实用教程(第4版)》

上一篇文章:【数据库——MySQL】(9)函数、查询练习及讲解

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

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

相关文章

WRF高精度气象模拟技术及在地学领域中的实践应用

随着生态文明建设和“碳中和”战略的持续推进,我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域(生态、水资源、风资源及碳中和等问题)的主要驱动因素,合理认知气候变化有利于解释生态环境变化机理及过…

一个案例熟悉使用pytorch

文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集:1.3.2 获取训练集、测试集长度:1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使…

Open3D点云处理简明教程

推荐:用 NSDT编辑器 快速搭建可编程3D场景 这是“激光雷达入门”文章的延续。 在这篇文章中,我们将查看用于处理点云的 python 库和 Open3D 数据结构,执行可视化并操作点云数据,以便进行后续的分析处理。 如果你需要快速预览3D点…

速卖通,获取标题,价格,品牌字段,免测

aliexpress.item_get(获得aliexpress商品详情) 为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个速卖通应用注册一个应用程序键(App Key) 。 3&#xff09…

宏基因组元素循环:碳氮循环的动态耦合分析

微生物在环境中生长并不是靠单一元素周转而存活的,生物地球化学元素循环,例如碳、氮、磷、硫等,存在复杂的耦合关系。 研究表明,陆地生态系统的碳氮耦合过程中,氮的输入在促进植物初级生产力和土壤碳固存的同时也增加…

【计算机网络笔记八】应用层(五)HTTPS

什么是 HTTPS HTTPS 解决了 HTTP 不安全的问题 HTTP 整个传输过程数据都是明文的,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。 ① HTTPS 使用加密算法对报文进行加密,黑客截获了也看不懂 ② HTTP…

python安全工具开发笔记(五)——python数据库编程

一、Python DB API 在没有Python DB API之前: 有Python DB API之后: Python DB API包含内容 Python DB API访问数据库流程 二、Python Mysql开发环境 三、Python 数据库编程实例 数据库连接对象connection 连接对象:建立Python客户端…

post为什么会发送两次请求?

1 同源策略 在浏览器中,内容是很开放的,任何资源都可以接入其中,如 JavaScript 文件、图片、音频、视频等资源,甚至可以下载其他站点的可执行文件。但也不是说浏览器就是完全自由的,如果不加以控制,就会出现…

elementui引入弹出框报错:this.$alert is not defined 解决方案

1.按需引入文件element.js 注意:引入Message,MessageBox两个组件就行,alert包括在MessageBox里面了。 之前我引入了Alert组件,发现不行 2.在vue的prototype里注册伪名字 3.组件里直接调用就行了 4.实现效果 我发现elementui调用…

【实验记录】AGW | Visible-Infrared Re-ID

【RT】Visible Thermal Re-IDDeep Learning for Person Re-identification: A Survey and Outlook中提出了一个针对单/跨模态行人重识别的baseline:AGW 做过两次,在测试阶段有问题,现在再重做一次🤔Code RTX3090 修改数据集路…

数据中台实战(00)-大数据的尽头是数据中台吗?

除了支撑集团的大数据建设,团队还提供To B服务,因此我也有机会接触到一些正在做数字化转型的传统企业。从2018年末开始,原先市场上各种关于大数据平台的招标突然不见了,取而代之的是数据中台项目,建设数据中台俨然成为…

docker安装高斯数据库openGauss数据库

1.创建容器 #创建数据没有挂在的容器 docker run --name opengauss --privilegedtrue -d -e GS_PASSWORDEnmo123 -p 8090:5432 enmotech/opengauss:latest 2. 进入容器,并切换omm用户,使用gsql连接高斯数据库 [rootansible ~]# docker ps -a CONTAIN…

【Proteus仿真】【STM32单片机】多功能智能台灯

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1604液晶、按键、蜂鸣器、语音识别模块、PCF8591 ADC模块、DHT11温湿度传感器、光线传感器、台灯、人体红外传感器等。 主要功能&#xff1a…

华为Mate 60系列搭配出境易,轻松玩转出境游高能体验~

今年中秋国庆假期“合体”,长达8天的超级黄金周即将到来。不少朋友期待来一场说走就走的出境旅行,趁此机会远游异国他乡,领略不一样的风土人情。众所周知,海外的应用生态和网络环境和国内并不相同。想要获得“一机在手&#xff0c…

python二级

python二级Turtle 太阳花四瓣花正六边形和圆内切六边形质数(素数)鲁棒输入异常处理python math模块 解密函数的返回结果是元组类型类 太阳花 题目:用turtle库的turtle.fd()函数和turtle.left()函数绘制一个边长为200的太阳花。绘制效果如图&…

感性负载箱与电容负载箱有什么区别?

感性负载箱和电容负载箱在电力系统中的应用场景有所不同,感性负载箱通常用于测试和评估电力系统中的感性负载设备,如电动机和变压器。这些设备在运行过程中会产生感性负载,即对电流的相位差有一定要求。感性负载箱可以通过调节串联的电感元件…

小米科技笔记 | ElasticSearch与Redis底层原理解析

大家好,我是小米,一个热衷于技术分享的小伙伴!今天,我们来探讨一下两个非常重要的数据存储和检索工具:ElasticSearch和Redis。虽然它们都是高度优化的工具,但在底层原理上有着明显的区别。接下来&#xff0…

多维时序 | MATLAB实现GA-BP多变量时间序列预测(遗传算法优化BP神经网络)

多维时序 | MATLAB实现GA-BP多变量时间序列预测(遗传算法优化BP神经网络) 目录 多维时序 | MATLAB实现GA-BP多变量时间序列预测(遗传算法优化BP神经网络)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.MATLAB实现GA-BP多变量时间序列预测(遗传算法优化BP神经网络)&…

Linux IP地址、主机名

查看ip地址指令 ifconfig 如无法使用ifconfig命令,可以安装 yum -y install net-tools ip address show--显示协议地址

AEM TESTPRO K50 ROADSHOW华南区路演

AEM的测试和测量解决方案是由一个具有四十多年经验的团队为企业和汽车客户的解决方案而设计开发的。AEM的解决方案也是专为用户在整个产品生命周期阶段,包括布线和连接器,无论是制造和实验室环境,在安装或日常网络故障排除方面,其…