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

目录

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

1. 视图

1.1 创建视图

基础语法:

CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[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 SELECTborrower.`name` AS 借阅人姓名, borrower.category AS 借阅人类别, book.`name` AS 书名, information.leadDate AS 借出日期, information.returnDate AS 应归还日期,TO_DAYS(NOW()) - TO_DAYS(information.returnDate) AS '逾期时长(天)'
FROMbookINNER JOINinformationON book.id = information.bookidINNER JOINborrowerON 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 borrowerWHERE `name` IN (SELECT `借阅人姓名` FROM overdue_viewWHERE `逾期时长(天)` > 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.xdnf.cn/news/143060.html

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

相关文章

Linux 用户 用户组管理

用户 Linux系统是一个多用户多任务的分时操作系统,任何要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后&a…

华为ICT——第二章-数字图像处理私人笔记

目录 1:计算机视觉:​编辑 2:计算机视觉应用:​编辑 3:计算机视界核心问题:​编辑 4:相关学科: 5:计算机视觉与人工智能: 最成熟的技术方向是图像识别 6…

【面试算法——动态规划 20】最长公共子序列 不相交的线

1143. 最长公共子序列 链接: 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

SpringBoot 如何使用 Druid 进行数据库连接池管理

使用 Druid 进行数据库连接池管理的 Spring Boot 应用 数据库连接池是任何Web应用程序的重要组成部分,它们有助于管理数据库连接的复用,提高性能和资源利用率。Druid是一个强大的数据库连接池,它具有监控、防SQL注入、快速、可扩展等特点。在…

谈谈最近招人的感受!

最近折腾新的项目,面试了很多实习生小伙伴,我说说我的一些「面试」感受, 虽然是一个老生常谈的话题,但是依然提一下。 准时很重要:提前一点时间,踩个点,别迟到,面试的过程中由于每个…

低功耗引擎Cliptrix为什么可以成为IOT的高效能工具

在万物互联的时代,现代人已普遍接受电视、音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点,例如iot设备的内存、处理器等核心元件无法与手机…

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 (Multiprocessing)2、多线程(Multithreading)3、协程(Coroutine) 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …

python运算函数

简 python输入输出函数input() :用户用于读取键盘输入的函数,返回值为“string”类型 运算函数abs(x) :x的绝对值int(x) :将x转换成整型(截掉小数部分)float(x):浮点数divmod(x,y):返回(x//y,x%y)complex(re,im):返回一…

linux部署页面内容

/bin:该目录包含了常用的二进制可执行文件,如ls、cp、mv、rm等等。 /boot:该目录包含了启动Linux系统所需的文件,如内核文件和引导加载程序。 /dev:该目录包含了所有设备文件,如硬盘、光驱、鼠标、键盘等等…

Scoket网络编程

1.首先来的个简单示例: 客户端: using System; using System.Net.Sockets; using System.Net; using System.Text;namespace Client {internal class Program{static void Main(string[] args){Console.WriteLine("Client");// 创建一个Socket并连接到服…

windows11 cmd使用python没有反应, windows11使用python跳应用商店

1. 修改系统变量位置,右击我的电脑,选择属性: 点击环境变量,找到path: 将python 的path移到windowsapp 上侧 保存退出。重新打开cmd,输入命令python -v

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性?二、虹科的测试仿真工具如何在汽车零部件测试展露头角?三、应用场景**应用场景1:方向盘开关的功能测试****应用场景2:各类型电机的控制测试****应用场景3:RGB氛围灯的功能测试…

CISSP,你值得拥有(我的学习之路)

(只分享三点:怎么学、怎么练、怎么考。) 我为啥去考CISSP 我是个在信安行业摸爬滚打将近20年的老油条,知道CISSP这个认证是很早前的事情了,但一直以来都觉得它有点难,加上人又懒得要命,也就始…

安装elasticsearch

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提…

用selenium和xpath定位元素并获取属性值以及str字符型转json型

页面html如图所示: 要使用xpath定位这个div元素,并且获取其属性data-config的内容值。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Optionshost127.0.0.1 port10808 …

Serlet API详解

目录 一、HttpServlet 1.1 处理doGet请求 1.2 处理doPost请求 二、HttpServletRequest 2.1 核心方法 三、HttpServletRespons 3.1 核心方法 一、HttpServlet 在编写Servlet代码的时候,首先第一步要做的就是继承HttpServlet类,并重写其中的某些方法 核心…

最新ChatGPT网站系统源码+支持GPT4.0+支持AI绘画Midjourney绘画+支持国内全AI模型

一、SparkAI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统?小编这里写一个详细图文教程吧&a…

前端知识总结

在前端开发中,y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1,并将自增后的值赋给变量y。 具体来说,x是一种后缀自增运算符,表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…