MySql之索引,视图,事务以及存储过程举例详解

一.数据准备

数据准备可参考下面的链接中的数据准备步骤

MySql之内连接,外连接,左连接,右连接以及子查询举例详解-CSDN博客

(如有问题可在评论区留言)

二.存储过程

1.定义

存储过程 PROCEDURE ,也翻译为存储程序,是一条或者多条 SQL 语句的集合

2.语法

create procedure 存储过程名称(参数列表)
begin
sql 语句
end

3.举例

创建存储过程
--创建存储过程 stu(),查询 students 表所有学生信息
CREATE PROCEDURE stu()
BEGIN
	SELECT * from students;
end

调用存储过程

--调用存储过程stu
call stu();

执行结果:

删除存储过程

--删除存储过程,删除的时候不用写名字后面的()
--方法一
DROP PROCEDURE stu;
--方法二(方法二,加了if EXISTS,与方法一的区别就是,如果stu已经被删除,再执行方法一,会报错,但是执行方法二不会报错)
drop PROCEDURE if EXISTS stu;

三.视图

1.定义

对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改 sql 语句,则需要在多个地方进行修改,维护起来非常麻烦;
解决:定义视图;

视图本质就是对select(查询)语句的封装

视图可以理解为一张只读的表,针对视图只能用select,不能用delete和update

2.语法

--创建视图
create view 视图名称 as select 语句;
--使用视图
select * from 视图名称;
--删除视图
方法一
drop view 视图名称;
方法二
drop view if exists 视图名称;

3.举例

创建视图

stu_nan可看成是一个新的表

--创建一个视图,查询所有男生信息
CREATE VIEW stu_nan as 
SELECT * from students where sex = '男';

使用视图

--使用视图,例1
SELECT * from stu_nan
--使用视图,例2
--在视图 stu_nan 中查找年龄大于25岁的学生信息
select * from stu_nan where age >25;
--使用视图,例3
SELECT * from stu_nan INNER JOIN scores 
on stu_nan.studentNo = scores.studentNo;

例1运行结果(其他的例子感兴趣可自行验证):

删除视图

--删除视图
--方法一
drop VIEW stu_nan;
--方法二
DROP view if EXISTS stu_nan;

4.什么时候用视图

如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询这种

四.事务

1.为什么要有事务

事务广泛的运用于订单系统、银行系统等多种场景;
例如: A 用户和 B 用户是银行的储户,现在 A 要给 B 转账 500 元,那么需要 做以下几件事:
1、检查 A 的账户余额>500 元;
2、A 账户中扣除 500 元;
3、B 账户中增加 500 元;
正常的流程走下来, A 账户扣了 500 B 账户加了 500 ,皆大欢喜。那如果 A 账户扣了钱之后,系统出故障了呢?A 白白损失了 500 ,而 B 也没有收到本该属 于他的 500 。以上的案例中,隐藏着一个前提条件: A 扣钱和 B 加钱,要么同时 成功,要么同时失败,事务的需求就在于此

2.什么是事务

所谓事务 , 它是一个操作序列,这些操作要么都执行,要么都不执行,它是一 个不可分割的工作单位。
例如:银行转帐工作:从一个帐号扣款并使另一个帐号增款, 这两个操作要么都执行,要么都不执行 。所以,应该把他们看成一个事务。
事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性;

3.事务指令

  • 事务是多条更改数据操作的sql语句集合

  • 一个集合数据有一致性,要么就都失败,要么就都成功回滚

  • begin ----开始事务,开启事务后执行修改update或者删除delete记录语句,变更会写到缓存中,而不会立刻生效

  • rollback ----回滚事务,放弃对表的修改

  • commit ---- 提交事务,对表的修改生效

没有写begin代表没有事务,没有事务的表操作都是实时生效.

如果只写了begin, 没有rollback,也没有commit, 结果是rollback或者系统退出,结果也是rollback

回滚事务

(第二步执行的完成后,可以用查询语句查询stuents表是否真的删除001的记录--应该是被删除了

第三步执行的完成后,可以用查询语句查询scores表是否真的删除001的记录--应该是被删除了

第四步执行完成后,可以分别查询两个表的内容,001的记录都还存在)

-- 例 1:
-- 第一步执行:开始事务(begin;)
-- 第二步执行:删除 students 表中 studentNo 为 001 的记录,
-- 第三步执行:同时删除 scores 表中 studentNo 为 001 的记录, 
-- 第四步执行:回滚事务,两个表的删除同时放弃
begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
-- 回滚事务,放弃更改
ROLLBACK;

注意:如果在第二步执行或者第三步执行完成后,直接把navicat关掉,那么重新进入navicat时,查询students表和scores表的内容时,001记录是存在的(验证了这句话:系统退出或系统有问题了,结果也是rollback

提交事务

-- 开启事务,
-- 删除 students 表中 studentNo 为 001 的记录,
-- 同时删除 scores 表中 studentNo 为 001 的记录, 
-- 提交事务,使两个表的删除同时生效

begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
--提交事务,一旦提交事务,两个删除操作同时生效
commit;

五.索引

1.引入索引

看一本书,怎么快速知道要查看的内容在多少页?
给书建立一个目录;
  通过目录的索引,快速找到内容对应的页。
当表中数据量很大时,查找数据会变得很慢;
  可以给表建议一个类似书籍中的目录,从而加快数据查询效率,这在数据库
中叫索引( index );
注意:索引是对于表来说的,如果没有表,有索引也没有任何意义;就好比目录,没有对应的书籍,有目录也没有用;

2.创建索引的目的

  • 给表建立索引,目的是加快select查询的速度

  • 如果一个表记录很少,几十条,或者几百条,不用索引

  • 表的记录特别多,如果没有索引,select语句效率会非常低

3.语法

创建索引

  • create index 索引名称 on 表名(字段名称(长度));

  • 如果字段为字符串,需要写明创建表字段的时候字符串的长度

  • 字段类型如果不是字符串,可以不填写长度部分。

调用索引

  • 不需要写调用索引的语句,只要where条件后面用到的字段建立了索引,那么系统会自动调用

查看索引

  • show index from 表名

  • 对于主键,系统会自动建立索引

删除索引

  • drop index 索引名 on 表名

4.举例

创建索引
-- 例1:为表 students 的 age 字段创建索引,名为 age_index
CREATE index age_index on students (age);

-- 例2:为表 students 的 name 字段创建索引,名为 name_index
CREATE INDEX name_index on students (name(10));

查看索引
-- 查看students表的索引
show index from students;

结果(主键会自己自动生成索引):

调用索引

--调用索引
-- where条件后面的字段,数据库系统会自动查找是否有索引
-- 这里会自动调用age_index
select * from students where age = 30;
-- 自动调用name_index
SELECT * from students where name = '李白';
-- 不会调用任何索引,因为sex字段没有索引
SELECT * from students where sex = '女';

删除索引

-- 删除索引age_index
drop index age_index on students;
-- 删除索引name_index
drop index name_index on students;

5.索引的优缺点

  • 提高select的查询速度

  • 降低update,delete和insert语句的执行速度

  • 项目中80%以上是select,所以index必须的

  • 在实际工作中如果涉及到大量的数据修改操作,修改之前可以把索引删除,修改完成后再把索引建立起来

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【代码】基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法matlab

程序名称:基于量子粒子群算法(QPSO)优化LSTM的风电、负荷等时间序列预测算法 实现平台:matlab 代码简介:代码是基于QPSO-LSTM的负荷、光伏、风电等时间序列预测,MATLAB编写。包含LSTM(长短时记…

大数据技术之数据安全与网络安全——CMS靶场(文章管理系统)实训

大数据技术之数据安全与网络安全——CMS靶场(文章管理系统)实训 在当今数字化时代,大数据技术的迅猛发展带来了前所未有的数据增长,同时也催生了对数据安全和网络安全的更为迫切的需求。本篇博客将聚焦于大数据技术背景下的数据安全与网络安全&#xff…

面对困境时的力量——《难不难》与歌手荆涛的坚持

歌手荆涛演唱的《难不难》不仅是一首歌曲,更是一种精神的呈现。它告诉我们,面对问题时,只要我们坚持并勇往直前,一切困难都会变得简单。无论前方有多少险阻,总有过去的那一天,只要我们不放弃,就…

【计算机网络学习之路】日志和守护进程

文章目录 前言一. 日志介绍二. 简单日志1. 左字符串2. 右字符串 三. 守护进程1. ps -axj命令2. 会话扩展命令 3. 创建守护进程 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本…

JDK、JRE、JVM的特点和关联

Java 的三个重要的概念是 JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)。它们之间有着密切的关联,同时又有不同的职责和特点。 JDK(Java…

中伟视界:创新解决方案,搭建自适应的AI算法模型训练平台

搭建AI算法模型自训练平台是当今人工智能领域的热门话题,但是其中存在着许多技术难点需要克服。 自训练平台需要具备高效的算法模型,这就要求能够处理庞大的数据量并进行高速计算。 平台需要具备强大的数据管理及存储能力,以满足训练过程中的…

C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序

凑数的&#xff0c;仅供参考。 1 文本格式 /// <summary> /// 《小白学程序》第二十六课&#xff1a;大数&#xff08;BigInteger&#xff09;的Toom-Cook 3乘法 /// Toom-Cook 3-Way Multiplication /// </summary> /// <param name"a"></par…

C语言进阶之笔试题详解(1)

引言&#xff1a; 对指针知识进行简单的回顾&#xff0c;然后再完成笔试题。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言&#xff1a; 知识简单回顾 指针是什么 指针变…

基于51单片机的公交自动报站系统

**单片机设计介绍&#xff0c; 基于51单片机的公交自动报站系统 文章目录 一 概要公交自动报站系统概述工作原理应用与优势 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 很高兴为您介绍基于51单片机的公交自动报站系统&#xff1a; 公交自动报…

[网鼎杯 2020 朱雀组]Nmap

启动环境 结合题目首先就是要知道关于关于nmap命令 相关的命令-oN 标准保存 -oX XML保存 -oG Grep保存 -oA 保存到所有格式 -iL 读取文件内容&#xff0c;以文件内容作为搜索目标 -o 输出到文件 -sP Ping 扫描 还有许多 nmap命令https://blog.csdn.net/weixin_735627…

【知网稳定检索】第九届社会科学与经济发展国际学术会议 (ICSSED 2024)

第九届社会科学与经济发展国际学术会议 (ICSSED 2024) 2024 9th International Conference on Social Sciences and Economic Development 第九届社会科学与经济发展国际学术会议(ICSSED 2024)定于2024年3月22-24日在中国北京隆重举行。会议主要围绕社会科学与经济发展等研究…

java io 流,输入流和输出流;节点流和处理流;字节流和字符流

文章目录 java 中 IO 流分为几种?按照流的流向分&#xff0c;可以分为输入流和输出流&#xff1b;按照流的角色划分为节点流和处理流。IO流主要的分类方式有以下3种&#xff1a; java中的IO流也是工作中使用到比较频繁的一个内容&#xff0c;今天以这篇文章来了解它的概念和整…

快速认识Linux的几个指令

我们先简单认识几个指令&#xff0c;为之后的指令学习打好基础 打开XShell并登录云服务器 01.pwd指令 pwd命令的作用是显示当前在Linux系统中所处的路径 02.ls指令 ls命令的作业是罗列出当前路径下的文件名&#xff08;即pwd的路径下&#xff09;&#xff0c;由于我们没有新…

2023.11.23使用flask实现在指定路径生成文件夹操作

2023.11.23使用flask实现在指定路径生成文件夹操作 程序比较简单&#xff0c;实现功能&#xff1a; 1、前端输入文件夹 2、后端在指定路径生成文件夹 3、前端反馈文件夹生成状态 main.py from flask import Flask, request, render_template import osapp Flask(__name__)a…

WorkPlus即时通讯软件,以自主安全为底座,连接工作的一切

在当今竞争激烈的商业环境中&#xff0c;中大型企业对于移动办公平台的需求越来越迫切。在众多可选的平台中&#xff0c;WorkPlus凭借其高性价比和针对中大型企业的特色功能&#xff0c;成为了许多企业的首选。本文将为各位读者深度解析WorkPlus私有化部署的优势&#xff0c;带…

Co-DETR:DETRs与协同混合分配训练代码学习笔记

关于论文的学习笔记&#xff1a;Co-DETR:DETRs与协同混合分配训练论文学习笔记-CSDN博客 作者提出了一种新的协同混合任务训练方案&#xff0c;即Co-DETR&#xff0c;以从多种标签分配方式中学习更高效的基于detr的检测器。这种新的训练方案通过训练ATSS和Faster RCNN等一对多标…

Proteus仿真--基于PG12864LCD设计的指针式电子钟

本文介绍基于PG12864LCD设计的指针式电子钟&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中时间芯片选用DS1302芯片&#xff0c;液晶选用PG12864LCD模块&#xff0c;按键K1-K3&#xff0c;K1用于时分选择&#xff0c;K2用于调整功能&#xff0c…

LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86

facebookresearch/llama Stars: 36.0k License: NOASSERTION LLaMA 2 是一个开源项目&#xff0c;用于加载 LLaMA 模型并进行推理。 该项目的主要功能是提供预训练和微调后的 LLaMA 语言模型的权重和起始代码。这些模型参数范围从 7B 到 70B 不等。 以下是该项目的关键特性…

Docker容器化部署若依微服务ruoyi-cloud项目

系统环境 接下来的内容以 Ubuntu 22.04.1 操作系统为例。 下载安装Docker Ubuntu hihi-IdeaCentre-GeekPro-15ICK:~$ sudo su [sudo] hi 的密码&#xff1a; roothi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps 找不到命令 “docker”&#xff0c;但可以通过以下软件包安…

C# 使用NPOI操作Excel的工具类

写在前面 NPOI是POI项目的.NET迁移版本。POI是一个开源的Java 读写 Excel、Word 等微软Ole2组件文档的项目&#xff1b;使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作。 NPOI类库中操作EXCEL有两个模块分别是&#xff1a; 1️.HSSF模块&a…