mysql进阶
mysql进阶
视图
视图是一个基于查询的虚拟表,封装了一条sql语句,通俗的解释,视图就是一条select查询之后的结果集,视图并不存储数据,数据仍旧存储在表中。
创建视图语句:
create view view_admin as select * from admin
使用视图语句:
select * from view_admin
一个在线代码格式化工具:http://word.wdlx.com/
存储过程
存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,这段sql语句中一般包含着逻辑处理,调用存储过程可以减少应用程序与数据库的交互次数。
语法:
参数共有三种:IN 输入型 OUT 输出型 INOUT 输入输出型
创建存储过程
DELIMITER$$
CREATE
PROCEDURE`news`.`test1`(INp_accountINT,OUTp_countINT)
BEGIN
SELECTCOUNT(1) INTOp_accountFROMadminWHEREaccount=P_account;
SELECTp_account;
END$$
DELIMITER ;
CALLtest1('admin',@p_count)
declare中用来声明变量,变量赋值用default使用存储过程:@为占位符
具体使用
DELIMITER$$
CREATEPROCEDURE test(IN p_day INT)
BEGIN
CASEWHEN p_day = 0THEN
SELECT"星期天";
ELSE
SELECT"星期一";
ENDCASE;
END$$
CALL test(2);
函数
函数语法:
createfunction 函数名([参数列表]) returns 数据类型
begin
DECLARE 变量;
sql 语句;
return 值;
end;
注意:
1.参数列表包含两部分:参数名 参数类型
2.函数体:肯定会有 return 语句,如果没有会报错
3.函数体中仅有一句话,则可以省略 begin end
4.使用 delimter 语句设置结束标记
设置函数可以没有参数
SET GLOBAL log_bin_trust_function_creators=TRUE;
删除函数
DROP FUNCTION 函数名;
具体使用:
DELIMITER$$
CREATEFUNCTION checkUserType(p_type INT) RETURNSVARCHAR(4)
BEGIN
IF p_type = 0THEN
RETURN'管理员';
ELSE
RETURN'业务用户';
ENDIF;
END$$
SELECT tu.account,checkUserType(tu.type)utype FROMuser tu
触发器
触发器是一种特殊的存储过程,其特殊性在于它并不需要用户直接调用,,而是在对表进行增删改操作之前或之后就进行的存储过程。
特点:
1.与表相关联
触发器定义在特定的表上,这个表称为触发器表。
2.自动激活触发器
当对表中的数据执行 INSERT、UPDATE 或 DELETE 操作时,如果对表上的这 个特定操作定义了触发器,该触发器自动执行,这是不可撤销的。
3.不能直接调用
与存储过程不同,触发器不能被直接调用,也不能传递或接受参数
4.作为事务的一部分
触发器与激活触发器的语句一起做为对一个单一的事务来对待,可以从触发器中 的任何位置回滚。
语法:
CREATETRIGGER 触发器名称 触发时机 触发事件
ON 表名称
FOREACHROW-- 行级触发
BEGIN
语句
END;
触发时机:before以及after两种
触发事件:insert,delete,update三种
DELIMITER $$
CREATETRIGGER save_user_log AFTERINSERT
ONuser
FOREACHROW
BEGIN
INSERTINTO test(id,NAME)VALUES(new.id,new.account);
END$$;
--触发
INSERTINTOuser(account)VALUES('jim')
mysql架构
mysql架构共有四层:
连接层:最上层为客户端及连接服务,包含本地的socket通信;主要完成一些类似于连接处理,授权认证,及相关的安全方案。
服务层:这一层主要完成mysql核心服务架构,SQL接口,缓存查询以及SQL分析,优化函数执行
引擎层:存储引擎层,负责mysql数据库中数据的存储和提取
物理文件存储层:将数据存储在文件系统中,并完成与存储引擎的交互。
mysql引擎
mysql中用各种技术存储在文件中,这些技术提供了各种不同的功能和能力,用于改善应用的整体功能,这些不同的技术以及配套的相关功能称之为mysql引擎。
数据库引擎是用于存储,处理,保护数据的核心服务,利用数据库引擎可迅速控制访问权限并快速处理事务。
部分相关语法:
查看支持的引擎
SHOWENGINES;
查看表引擎
SHOWTABLESTATUSLIKE'表名'修改引擎
方式1:将mysql.ini中default-storage-engine=InnoDB,重启服务. 方式2:建表时指定CREATETABLE表名(...)ENGINE=MYISAM;
方式3:建表后修改ALTERTABLE表名ENGINE=INNODB;
存储引擎中我们主要了解分析Innodb以及MyIsam
Innodb:mysql数据库中默认的存储引擎,Innodb是一个事务型存储引擎,支持行级锁,主外键约束以及数据缓存,不存储表的总行数。
MyIsam:MyIsam也是mysql引擎,但是没有提供对数据库事务的支持,也不支持外键约束和行级锁以及数据缓存,支持表锁,存储表的总行数
两者对比:

索引
什么是索引?
索引是一个已经排好序的快速查找的数据结构,也是帮助mysql高效获取数据的数据结构。
索引原理
索引的目的在于提高查询效率,相当于一个书籍目录,以此定位到下一个更小的查询范围。本质上都是通过不断的缩小查询范围,来筛选出最终的数据结果,将随机事件变成一个顺序事件,降低查询难度。
索引优势劣势
优势:提高数据查询的效率,减少了数据库的IO成本
劣势:维护索引需要占用内存空间,除此之外,对表进行增删改时都需要对索引进行维护,消耗了时间。
索引分类
主键索引:设定主键后,数据库会主动建立索引
ALTERTABLE 表名 addPRIMARYKEY 表名(列名);
删除建主键索引:
ALTERTABLE 表名 dropPRIMARYKEY ;
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
CREATEINDEX 索引名 ON 表名(列名);
删除索引:
DROPINDEX 索引名;
唯一索引:索引列的值必须唯一,允许为 null
CREATEUNIQUEINDEX 索引名 ON 表名(列名);
删除索引
DROPINDEX 索引名 ON 表名;
组合索引(复合索引):
即一个索引包含多个列,在数据库操作期间,复合索引比单值索引所需要的
开销更小(对于相同的多个列建索引),当表的行数远大于索引列的数目时可
以使用复合索引
创建复合索引
CREATEINDEX 索引名 ON 表名(列 1,列 2...);
删除索引:
DROPINDEX 索引名 ON 表名;
组合索引最左前缀原则
列如表中有 a,b,c 3 列,为 a,b 两列创建组合索引,那么在使用时需要满足最左
侧索引原则.在使用组合索引的列作为条件时,必须要出现最左侧列为条件,否则 组合索引不生效.
select * fromtablewhere a=’’and b=’’索引生效
select * fromtablewhere b=’’and a=’’索引生效
select * fromtablewhere a=’’and c=’’索引生效
全文索引
需要模糊查询时,一般索引无效,这时候就可以使用全文索引了
查看索引:
SHOWINDEXFROM 表名;
索引创建原则
那些情况创建索引
主键自动创建唯一索引
经常用作where字段中查询字段的应创建索引
查询中用于与其他表关联的外键关系建立索引
查询中排序的字段,排序的字段若使用索引访问,大大提升了访问的速度
那些情况不能创建索引
表记录太少时,不需要创建索引
经常增删改的表必须要创建索引,虽然提高了查询数据的速度,但是每次定增删改时都需要维护索引
where条件中用不到的字段不需要创建表
索引数据结构
Indodb引擎的索引结构由B+树实现,为什么不是二叉树以及平衡二叉树呢,因为两者存储索引后,高度过大,查询数据的效果并不明显,而B+树可以通过一个结点存储多个数据降低了高度,并且非叶子结点不存储数据可以存放更多的索引,将数据都记录在叶子结点上,并且所有叶子都通过一个链表连接。
B树与B+树的区别(为什么使用B树):
B树每一个结点都存储有索引和数据,这样就导致一个结点可以存放的索引不会太多,而B+树的只有叶子结点存储数据,其它结点可以存放更多的索引,且B+树的维护了一条链表连接叶子结点,可以更好的支持全表扫描。
聚簇索引与非聚簇索引
聚簇索引:找到索引的位置,即就找到了数据,数据与索引存储在同一个文件中。Innodb中的索引大多是聚簇索引。
非聚簇索引:数据与索引是分离的,找到了索引,还是没有找到数据,需要找到主键再次回表查询,才可以找到数据。MyIsqm中的索引大多是非聚簇索引。
分离两者的主要依据就是是否回表查询,需要会回表查询的就是非聚簇索引,反之则是聚簇索引。
相关文章:
mysql进阶
mysql进阶视图视图是一个基于查询的虚拟表,封装了一条sql语句,通俗的解释,视图就是一条select查询之后的结果集,视图并不存储数据,数据仍旧存储在表中。创建视图语句:create view view_admin as select * from admin使…...
SD卡损坏了?储存卡恢复数据就靠这3个方法
作为一种方便的储存设备,SD卡在我们的日常生活中使用非常广泛。但是,有时候我们可能会遇到SD卡损坏的情况,这时候里面存储的数据就会受到影响。SD卡里面保存着我们很多重要的数据,有些还是工作必须要使用的。 如果您遇到了这种情…...
springboot+实践(总结到位)
一。【SpringBoot注解-1】 牛逼:云深i不知处 【SpringBoot注解-1】:常见注解总览_云深i不知处的博客-CSDN博客 二。【SpringBoot-3】Lombok使用详解 【SpringBoot-3】Lombok使用详解_云深i不知处的博客-CSDN博客_springboot lombok 三࿰…...
CorelDRAW2023新功能有哪些?最新版cdr下载安装教程
使用 CorelDRAW2023,随时随都能进行设计创作。在 Windows或Mac上使用专为此平台设计的直观界面,以自己的风格尽情自由创作。同全球数百万信赖CorelDRAW Graphics Suite 的艺术家、设计者及小型企业主一样,大胆展现真我,创作出众的…...
PLC 程序设计标准化方法
PLC 程序设计的标准化方法先从内容或者方法层面进行流程的分解,将分解的内容称为要素,要素的有机结合便构成了标准化的设计。流程标准化设计完成之后需要对各个要素分别进行标准化的设计。2.1、 PLC 程序设计的要素分解与有机结合根据软件程序设计的一般性方法结合PLC 程序设计…...
设计模式-笔记
文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…...
【全志T113-S3_100ask】12-3 Linux蓝牙通信实战(基于BlueZ的C语言BLE蓝牙编程)
【全志T113-S3_100ask】12-3 Linux蓝牙通信实战(基于BlueZ的C语言BLE蓝牙编程 背景(一)获取BlueZ源码(二)首次编译2-1 编写Makefile2-2 make编译2-3 首次测试2-3-1 开发板操作2-3-2 安卓端操作(三)源码分析3-1 程序入口3-2 蓝牙设备名称3-3 GATT服务(四)实战4-1 添加B…...
Java学习之路003——集合
1、 代码演示 【1】新增一个类,用来测试集合。先创建一组数组,数组可以存放不同的数据类型。对于Object类型的数组元素,可以通过.getClass方法获取到具体类型。 【2】如果数组指定类型为int的时候,使用.getClass()就会提示错误。 …...
生成和查看dump文件
在日常开发中,即使代码写得有多谨慎,免不了还是会发生各种意外的事件,比如服务器内存突然飙高,又或者发生内存溢出(OOM)。当发生这种情况时,我们怎么去排查,怎么去分析原因呢? 1. 什么是dump文…...
K8S集群1.24使用docker作为容器运行时出现就绪探针间歇性异常
文章目录1. 环境介绍2. 异常信息3. 分析问题3.1 kubernetes 健康检查3.1.1 存活探针3.1.2 就绪探针3.1.3 启动探针3.2 检测方法4. 解决办法1. 环境介绍 组件版本kubernetes1.24.2docker18.03.1-cecri-docker0.2.6 2. 异常信息 最近监测到 kubernetes 集群上 calico-node Pod 运…...
士大夫身份第三方水电费第三方
package com.snmocha.snbpm.job;import org.springframework.stereotype.Component;import com.xxl.job.core.handler.annotation.XxlJob;import lombok.extern.slf4j.Slf4j;/*** Demo定时任务.* Author:zhoudd* Date:2023-01-15*/ Component Slf4j publ…...
RDO一体化部署OpenStack
RDO一体化部署OpenStack 环境准备 安装centos7 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J785hZvT-1677578418769)(C:\Users\HONOR\AppData\Roaming\Typora\typora-user-images\image-20230228171254675.png)] 使用vmware安装安装centos7&a…...
CC2530+ESP8266使用MQTT协议上传阿里云的问题
ATMQTTPUB<LinkID>,<"topic">,<"data">,<qos>,<retain>LinkID: 当前只支持 0 topic: 发布主题, 最长 64 字节 data: 发布消息, data 不能包含 \0, 请确保整条 ATMQTTPUB 不超过 AT 指令的最大长度限制 qos: 发布服务质量, 参…...
Java基础:爬虫
1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.获取Matc…...
纯手动搭建大数据集群架构_记录008_搭建Hbase集群_配置集群高可用---大数据之Hadoop3.x工作笔记0169
首先准备安装包 然后将安装包分发到集群的其他机器上去 然后因为运行hbase需要zookeeper支持,所以这里首先要去,启动zk 走到/opt/module/hadoop-3.1.3/bin/zk.sh 然后 zk.sh start 启动一下,可以看到启动了已经 然后zk.sh status 可以看zookeeper的状态 然后我们再去启动一下…...
Linux系统认知——驱动认知
文章目录一、驱动相关概念1.什么是驱动2.被驱动设备分类3.设备文件的主设备号和次设备号4.设备驱动整体调用过程二、基于框架编写驱动代码1.驱动代码框架2.驱动代码的编译和测试三、树莓派I/O口驱动的编写1.微机的总线地址、物理地址、虚拟地址介绍2.通过树莓派芯片手册确定需要…...
Spring boot装载模板代码并自动运行
Spring boot装载模板代码涉及的子模块及准备省心Clickhouse批量写JSON多层级数据自动映射值模板代码生成及移交控制权给Spring IOC涉及的子模块及准备 最近比较有空,之前一直好奇,提交到线上考试的代码是如何执行测试的,在实现了基础的demo后…...
全国领先——液力悬浮仿生型人工心脏上市后在同济医院成功植入
2023年2月22日,华中科技大学同济医学院附属同济医院(同济医院)心脏大血管外科团队举办了一场气氛热烈的小规模庆祝活动,魏翔主任、程才副主任、王星宇副主任医师和李师亮医师到场,为终末期心衰患者黄先生“庆生”&…...
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
云原生周刊:开源漏洞仍然是开发人员面临的挑战 | 2023.2.27
Synopsys 发布了最新一期的开源安全年度报告,开源安全和风险分析 (OSSRA)。这份报告由Synopsys 网络安全研究中心 (CyRC)创建,着眼于 Black Duck 审计服务团队进行的 1,700 多次商业代码库审计的结果。 自 2019 年以来,OSSRA 所有 17 家企业…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
