当前位置: 首页 > news >正文

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 三&#xff0…...

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:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 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涉及的子模块及准备 最近比较有空&#xff0c;之前一直好奇&#xff0c;提交到线上考试的代码是如何执行测试的&#xff0c;在实现了基础的demo后…...

全国领先——液力悬浮仿生型人工心脏上市后在同济医院成功植入

2023年2月22日&#xff0c;华中科技大学同济医学院附属同济医院&#xff08;同济医院&#xff09;心脏大血管外科团队举办了一场气氛热烈的小规模庆祝活动&#xff0c;魏翔主任、程才副主任、王星宇副主任医师和李师亮医师到场&#xff0c;为终末期心衰患者黄先生“庆生”&…...

基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

云原生周刊:开源漏洞仍然是开发人员面临的挑战 | 2023.2.27

Synopsys 发布了最新一期的开源安全年度报告&#xff0c;开源安全和风险分析 (OSSRA)。这份报告由Synopsys 网络安全研究中心 (CyRC)创建&#xff0c;着眼于 Black Duck 审计服务团队进行的 1,700 多次商业代码库审计的结果。 自 2019 年以来&#xff0c;OSSRA 所有 17 家企业…...

Docker学习总结

1、镜像操作 1.1 拉取、查看镜像 步骤一&#xff1a; 首先去镜像仓库搜索nginx镜像&#xff0c;比如[DockerHub]( Docker Hub Container Image Library | App Containerization ) : 步骤二&#xff1a; 根据查看到的镜像名称&#xff0c;拉取自己需要的镜像 通过命令&…...

Android 9.0系统源码_通知服务(三)应用发送状态栏通知的流程

前言 应用发送一个显示在状态栏上的通知&#xff0c;对于移动设备来说是很常见的一种功能需求&#xff0c;本篇文章我们将会结合Android9.0系统源码具体来分析一下&#xff0c;应用调用notificationManager触发通知栏通知功能的源码流程。 一、应用触发状态栏通知 应用可以通…...

python中的序列——笔记

一、介绍 ABC语言时一个致力于为初学者设计编程环境的长达十年的研究项目。 Python也从ABC那里继承了用统一的风格去处理序列数据这一特点。不管是哪种数据结构&#xff0c;字符串、列表、字节序列、数组、XML元素&#xff0c;抑或是数据库查询结果&#xff0c;它们都共用一套…...

taobao.user.seller.get( 查询卖家用户信息 )

&#xffe5;开放平台基础API必须用户授权 查询卖家用户信息&#xff08;只能查询有店铺的用户&#xff09; 只能卖家类应用调用。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 点击获取key和secret请求示例…...

WebRTC Qos策略

1.WebRTC 用于提升 QoS 的方法&#xff1a;NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR&#xff08;动态帧率调整策略&#xff09;https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK&#xff1a;一种通知技术&#xff0c;…...

Mysql数据查询

文章目录1 group by子句2 回溯统计3 having子句1 group by子句 group by子句**&#xff1a;分组统计&#xff0c;根据某个字段将所有的结果分类&#xff0c;并进行数据统计分析 分组的目的不是为了显示数据&#xff0c;一定是为了统计数据group by子句一定是出现在where子句之…...

Kafka入门(五)

下面聊聊Kafka常用命令 1、Topic管理命令 以topic&#xff1a;test_1为例 1.1、创建topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic test_1参数说明&#xff1a; –bootstrap-server&#xff1a;…...

如何快速在windows系统中切换node.js版本

前言 最近在同时维护公司的两个项目&#xff0c;一个是新项目&#xff0c;另一个是老项目&#xff0c;二者所依赖的node版本是不一致的。 这就导致我在切换项目的时候必须重新安装对应版本的 node.js&#xff0c;否则就会报各种神马错误。 但这一卸一装可着实烦死个银&#xf…...

设计模式-单例模式(java)

单例是一种常用的设计模式&#xff0c;它的目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。在Java编程语言中&#xff0c;实现单例有多种方法&#xff0c;本篇文章将介绍其中的两种实现方式。 方式一&#xff1a;饿汉式单例模式 饿汉式单例模式是最简单的实…...

Revit中复合墙图层的规则和CAD识别翻模墙

一、Revit中用于指定复合墙图层的规则&#xff0c;具体内容? 在编辑复合墙的结构时&#xff0c;请使用“指定图层”工具将“编辑部件”对话框中的行指定给图层或预览窗格中的区域&#xff0c;并遵循这些原则。 在预览窗格中&#xff0c;样本墙的各个行必须保持从左到右的顺序显…...

广州番禺服装网站建设/电商的运营模式有几种

今天在看hibernate视频时&#xff0c;看到视频上人家的hibernate.cfg.xml配置文件在配置hibernate方言时&#xff0c;发现视频上是这样写的<property name"dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>&#xff0c;结果我也是那样写&a…...

湖南网站搜索排名优化电话/关键词挖掘方法

第四章 HTTP认证HttpClient提供对由HTTP标准规范定义的认证模式的完全支持。HttpClient的认证框架可以扩展支持非标准的认证模式&#xff0c;比如NTLM和SPNEGO。4.1 用户凭证 任何用户身份验证的过程都需要一组可以用于建立用户身份的凭据。用户凭证的最简单的形式可以仅仅是用…...

广东个人备案网站内容/免费招收手游代理

文章目录1. 线程池是什么&#xff1f;2. 线程池的基本架构3. 线程池的使用方式3.1 一池n线程3.2 一池一线程3.3 根据需求创建线程&#xff0c;可扩容&#xff0c;遇强则强4. 线程池中的七个参数5. 线程池中底层的工作流程6. 自定义线程池1. 线程池是什么&#xff1f; 线程池&a…...

网站建设功能评估表/网站搭建教程

Android Studio导入 jar包的方法 第一步&#xff0c;在 /app 目录下创建 一个 libs 文件夹&#xff0c;把 jar包 复制到 /app/libs 下 第二步&#xff0c;单击 jar包&#xff0c;点击 鼠标右键&#xff0c;点击 ’Add as Library...‘...

手机网站设置在哪里找/网络服务器价格

H5页面 绝对定位元素被 软键盘弹出时顶起在h5页面开发的过程中&#xff0c;我们可能会遇到下面这个问题&#xff0c;当页面中有输入框的时候&#xff0c;系统自带的软盘会把按钮挤出原来的位置。那么我们该怎么解决呢&#xff1f;下面列出一下的方法&#xff1a;一&#xff1a;…...

wordpress 转织梦/上海专业优化排名工具

简介&#xff1a;MySQL的二进制日志可以说或是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是失误安全型的.MySQL的二进制日志的作用是显而易见的&#xff0c;可以方便的备份这些日志以便…...