mysql 数据库使用分享(多图解析)

news2025/3/1 6:58:42

1、大体流程

1.1 一些概念

1.1.1 RDBMS

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,类似excel

1.1.2 OLAP 和 OLTP

OLTP(Online transactionprocessing):在线/联机 事务 处理。主要是对数据库中的数据进行增删改查

OLAP(Online analyticalprocessing):指联机 分析 处理。通过分析数据库中的数据来得出一些结论性的东西

OLTP查询一般仅涉及单表,点查为主,返回的是记录本身或该记录的多个列。

OLAP则不同,表中单条记录本身并不是查询所关心的

1.1.3 事务

多个操作同时进行,那么同时成功,那么同时失败。这就是事务。

1.2 innodb 存储结构

InnoDB将数据划分为若干页,每个页默认大小16KB。

页是磁盘和内存交互的基本单位,每次IO最少读取16KB的内容到内存。也就是说,IO的基本单位是页。一个页中可以存储多个行记录。

页之间可以不在物理结构上相连,通过双向链表相关联。页内的记录按主键大小排序构成单向链表。

行->页->区->段->表空间

区在文件系统中是连续分配的空间,一个区等于64个页,大小:64*16K=1MB

段中不要求区之间是相邻的,不同类型的数据库对象以不同段的形式存在。例如数据表段(叶子结点)、索引段(非叶子节点段)。

表空间本质上就是一个存放各种页的页面池,数据库由多个表空间组成,空间可划分为系统表空间(只有一个,额外记录系统信息)、用户表空间、临时表空间等。

如果你想让每一个数据库表都有一个单独的表空间文件的话,可以通过参数innodb_file_per_table = ON设置。

1.3 物理文件

1.3.1日志文件

1. 错误日志文件(error log):记录的是MySQL异常,或则MySQL链接有误

2. 二进制日志(binarg log):用于数据恢复、数据库的主从配置

3. 事务日志(rado undo log):事务的开启会存储到rado log日志以及撤销日志 undo log,稍后会刷入磁盘中

4. 慢查询日志(slow query log):可用于查询项目中的哪些sql语句查询较慢。

5. 查询日志(query log):用于查询缓慢的语句日志

1.3.2 数据库文件

1. .frm文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的创建表或则其他操作的语句)。

2. .myd文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的所有数据)。

3. .myi文件:(MySQL表的引擎是MyISAM的,存储的是该引擎的所有索引)。

4. .ibd和ibdata文件:(MySQL表的引擎是innodb的,存储的是该引擎的索引以及数据)。

注:每个存储引擎都有自己的文件夹保存各种数据,这些存储引擎真正存储了数据和索引等数据

直观感受下

1.4 mysql架构

  1. 网络连接层位于整个MySQL体系架构的最上层,主要担任客户端连接器的角色

  2. 连接池主要负责存储和管理客户端与数据库的连接信息,连接池里的一个线程负责管理一个客户端到数据库的连接信息。

  3. 数据库服务层是整个数据库服务器的核心,主要包括了系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存等部分。

  4. 系统文件层主要包括MySQL中存储数据的底层文件,与上层的存储引擎进行交互,是文件的物理存储层。

  5. MySQL中的存储引擎层主要负责数据的写入和读取,与底层的文件进行交互,MySQL中的存储引擎是插件式的,服务器中的查询执行引擎通过相关的接口与存储引擎进行通信,同时,接口屏蔽了不同存储引擎之间的差异。MySQL中,最常用的存储引擎就是InnoDB和MyISAM。

2、sql语句

2.1 DDL 定义结构

三个关键字 create ,alter ,drop

2.1.1 数据库 database

创建数据库: CREATE DATABASE [IF NOT EXISTS] mydb1; 删除数据库: DROP DATABASE [IF EXISTS] mydb1;

2.1.2 表 table:heavy_check_mark:

create table 表名( 字段1 字段1类型 [comment 字段1注释], 字段2 字段2类型 [comment 字段2注释], 字段3 字段3类型 [comment 字段3注释], ...... 字段n 字段n类型 [comment 字段n注释] )[comment 表注释]; alter table 表名 add 字段名 类型(长度) [comment 字段注释] [约束] alter table 表名 drop 字段名; truncate table 表名; #删除指定表,并重新创建该表 drop table [if exists] 表名; #删除数据表

2.1.3 索引 index

1、index 普通索引(最基本的索引,没有任何限制) alter table table_name add index index_name(column) 2、primary key 主键索引(是一种特殊的唯一索引,不允许有空值) alter table table_name add primary key(column) 3、unique 唯一索引(与“普通索引”类似,不同的就是,索引列的值必须是唯一,但允许有空值) alter table table_name add unique(column) 4、filltext 全文索引(仅可用于MyISAM表) alter table table_name add fulltext(column) 5、组合索引(遵循“最左前缀”原则) alter table table_name add index index_name(column1,column2,column3)

2.1.4 视图 view:x:

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

CREATE VIEW <视图名> AS <SELECT语句> ALTER VIEW <视图名> AS <SELECT语句> DROP VIEW <视图名1> [ , <视图名2> …]

一般不使用,不好管理

2.1.5 存储过程:x:

存储过就是数据库SQL与层层面的代码封装与重用

DROP PROCEDURE [ IF EXISTS ] <过程名>

不建议使用,不好管理sql

tips:可以使用工具生成的语句,然后操作。

2.2 DML 操作数据️

2.2.1 insert 添加数据

INSERT INTO `grade`(`gradeid`,`gradename`) VALUES('11114','大七')

2.2.2 update 修改数据

UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

2.2.3 delete 删除数据

DELETE FROM table_name WHERE condition;

2.3 查询语句

执行顺序: from where 聚合 having order limit

1、from 先做表连接

2、where 进行条件限制

3、然后做聚合 group by

4、然后做 having 过滤

5、然后对结果进行排序

6、最后限制数量 limit

3、索引

3.1 索引类型

  • 按数据结构分类:B+tree索引、Hash索引、Full-text索引。

  • 按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。

  • 按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。

  • 按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)。

3.2 索引的数据结构

页是mysql innodb存储的最基本结构,也是Innodb磁盘管理的最小单位。

mysql的文件系统在从硬盘加载数据的时候,会以页为单位进行加载,在内存中也是以页为单位进行调度。

在mysql中默认的page_size 是 16K

3.3 B+ 树的数据结构

B+ 树是mysql innodb 的索引数据结构,先看下数据的存储

解释下上面这张图

蓝色的表示数据指针,也就是索引列的值,

红色的表示数据页的地址。

可以看到上面这张图除叶子节点(粉色框的)外存储的数据都是索引列的值

同时所有的叶子节点做了一个指针指向。

3.4 mysql 什么情况下不适合建立索引

  1. 查询用不到的字段不需要创建索引。

  2. 数据量小的表最好不要使用索引,如果表中记录太少,比如少于1000个,那么是不需要创建索引的。表记录太少,是否创建索引对查询效率的影响并不大。

  3. 有大量重复数据的列上不要建立索引

  4. 在条件表达式中经常用到的不同值较多的列上建立索引,但字段中如果有大量重复数据,也不用创建索引。比如在学生表中的性别字段上只有男和女两个不同的值,因此无须建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低数据更新速度。

  5. 避免对经常更新的表创建过多的索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候会造成负担,从而影响效率。虽然提高了查询速度,同时却会降低更新 表的速度。

  6. 不建议使用无序的值作为索引,例如身份证、uuid(在索引比较时需要转为ASCII,并且插入时可能会造成页分裂,这些了解即可)、md5、hash、无序字符串等。

  7. 删除不再使用或者很少使用的索引,从而减少索引对更新操作的影响。

3.5 索引失效的情况

  1. 最佳左前缀法则

  2. 数据类型不匹配,导致索引失效

  3. 不等于(!= 或者<>)导致索引失效

  4. like以通配符%开头索引失效

  5. 联合查询时,字符集不匹配导致索引失效

  6. where中索引列使用了函数或者运算

4、java & python

4.1 spring-data-jpa & mybatis-plus

4.2 pymysql & sqlalchemy

5、经验分享

  • 查询的生命周期

客户端 -> 服务器查询缓存 -> 解析器 -> 预处理器 -> 查询优化器-> 查询执行引擎 -> 存储引擎 -> 数据

尽量命中缓存,尽量少读数据,尽量少查数据。

  • 小表驱动大表

执行 from 后的表关联查询是从左往右执行的,第一张表会涉及到全表扫描,所以将小表放在前面,先扫小表,扫描快效率较高,在扫描后面的大表,或许只扫描大表的前100行就符合返回条件并return了。

  • 删除大量数据时表先删除索引,后删除数据,再重建索引,使用truncate代替delete

  • 根据业务需要设计表,动静分离,减少冗余,可适当冗余

  • 进入docker容器

进入容器 docker exec -it 02d894edba22 bash 连接数据库 mysql -uroot -p123456 选择数据库 show databases; 切换到具体数据库 use ccp_device; 执行sql select * from device_info limit 10;

6、Navicat使用

6.1 建立连接

6.2 建库

6.3 建表

6.4 建立索引,删除表数据,增加表数据

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

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

相关文章

PTA:字符串加密

输入一个原始字符串&#xff08;长度小于80&#xff09;&#xff0c;然后输入一个5位的数字字符串作为加密密钥&#xff0c;对原始字符串中的每个字符根据其位置&#xff08;对5取模&#xff09;变换为加上数字字符串中的数字的字符。如输入原始字符串student&#xff0c;然后输…

Linux学习-36-文件系统管理-硬盘结构

10 Linux文件系统管理 之前在安装Linux的时候已经对 Linux 的分区方法和文件系统进行了介绍。不过那种分区方法是在安装系统的同时使用图形界面进行分区&#xff0c;如果添加了一块硬盘&#xff0c;那么当然要有不重新安装系统就可以分区的方法。文件系统即分区&#xff1a;原…

通达信接口进行二次编程开发步骤

大家都知道通达信接口是比较流行的快速通达信数据excel接口&#xff0c;能够提供多家券商&#xff0c;包括通达信数据excel接口、量化回测平台等。 通达信接口API接口说明&#xff08;部分&#xff09; 今天小编主要讲一下&#xff0c;关于通达信接口进行二次编程开发步骤如下…

【Linux】基本指令合集

1、ls 指令 功能: 显示当前目录下的所以子目录和文件 常用选项&#xff1a; -a&#xff1a;显示目录下的所以文件和以 . 开头的隐藏文件 -l&#xff1a;查看文件&#xff0c;ls -l等价于ll -R&#xff1a;显示所以子目录下的文件 -t&#xff1a;以时间排序 举例&#xff1a; …

PyCharm 的初始设置

目标 1、恢复 PyCharm 的初始设置 2、第一次启动 PyCharm/ 3、新建一个 Python 项目 4、设置 PyCharm 的字体显示 5、PyCharm 的升级以及其他 6、PyCharm 的官方网站地址是&#xff1a; PyCharm: the Python IDE for Professional Developers by JetBrains 01. 恢复 Py…

PMP有用吗,PMP含金量,如何转型项目经理?

先说一句&#xff0c;pmp是有用的&#xff0c;含金量也挺高的&#xff0c;也可以转型项目经理的&#xff0c;我再分别说明一下。 1、PMP有用么&#xff1f; 从本质来说&#xff0c;应该是pmp学习项目管理有没有用。 参加PMP认证与考试的过程是一个系统学习和巩固项目管理知识…

小白速点,计算机的存储规则你知道多少

计算机的存储规则 以前的认知 ​ 我们知道计算机中所有的文件都是存储在硬盘上的。当我们在编辑一个文档的时候&#xff0c;点击了保存按钮&#xff0c;那么文件中所有的数据都会保存在硬盘上。 但是他是怎么存储的呢&#xff1f;咱们就需要来学习一下。 计算机的二进制 ​…

三驾马车、四大赛道,元宇宙如何领跑数字经济?

进入2022年,全球互联网巨头继续加快布局元宇宙步伐,国内互联网企业也争相申请注册元宇宙相关商标,抢占数字经济发展先机。 党的十八大以来,发展数字经济逐渐上升为国家战略。多名业内权威人士表示,元宇宙或将引领全球数字经济发展,亟须尽快出台政策,破解制约元宇宙发展的法律…

隐式神经表示做超分:Local Texture Estimator for Implicit Representation Function

文章目录1. Local Texture Estimator for Implicit Representation Function1. 通过隐式神经网络表示方法 实现 超分辨率。2. 在编码器和解码器之间作者引入一个 local texture estimator3. 代码分析整体框架生成图像特征&#xff0c;编码器是一个常规的卷积网络&#xff0c;文…

vue3【生命周期讲解-详】

一、通过配置项的形式使用生命周期钩子 父组件&#xff1a; <template><button click"isShowDiv!isShowDiv">切换显示隐藏</button><Test v-if"isShowDiv"></Test> </template><script> import Test from ./…

怎么查看LinkedIn领英号用了多久?

怎么查看LinkedIn领英号用了多久&#xff1f; 1.第一步&#xff0c;点击“我”&#xff0c;点击设置和隐私 2.第二步&#xff0c;点击“数据隐私”&#xff0c;再点击“管理您的资料和活动” 3.往更早的时间去翻找&#xff0c;最早的就是注册时间 LinkedIn领英有什么开发…

Appium学习日记(三)——Windows系统测试桌面应用

Appium学习日记&#xff08;三&#xff09;——Windows系统测试桌面应用 一、环境搭建 1-1、WinAppDriver环境搭建 &#xff08;1&#xff09;开启开发者选项中的“开发人员模式” &#xff08;2&#xff09;Windows sdk下载安装 下载地址&#xff1a;https://developer.mi…

网络编程基础与套接字

&#x1f389;&#x1f389;&#x1f389;写在前面&#xff1a; 博主主页&#xff1a;&#x1f339;&#x1f339;&#x1f339;戳一戳&#xff0c;欢迎大佬指点&#xff01; 目标梦想&#xff1a;进大厂&#xff0c;立志成为一个牛掰的Java程序猿&#xff0c;虽然现在还是一个…

一次 G1 堆大小不均问题的排查及解决

现象 生产服务中&#xff0c;存在部分服务在 JVM 参数、POD 规格、物理机规格 一致&#xff0c;负载流量差异不大的情况下&#xff0c;出现在内存使用上差异较大的情况。下面是一些基本信息的收集和整理。 JVM 参数 -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:ParallelGCThre…

网络爬虫是什么?怎么学python爬虫

网络爬虫又称网络蜘蛛、网络机器人&#xff0c;它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页&#xff0c;并将所需要的数据抓取下来。通过对抓取的数据进行处理&#xff0c;从而提取出有价值的信息。 认识爬虫 我们所熟悉的一系列…

【Linux操作系统】crontab设置自动运行脚本

文章目录1 介绍2 修改系统时区3. 设置crontab定时任务3.1 相关命令3.2 自动运行shell脚本3.3 Crontab命令在线验证工具&#xff1a;3.4 Crontab日志路径1 介绍 最近要在linux机器上做量化策略&#xff0c;目前需要每天爬取一些数据&#xff0c;于是就写了一个python的策略放到…

【计算机硬件组成】基础知识(必备)

一、计算机硬件组成 ​ 从外观上来看&#xff0c;微型计算机主要包括CPU、主板、硬盘、内存、显卡、鼠标、键盘、机箱、电源、光驱。 我们就来重点说一说其中我们平时最耳目能详的&#xff1a;CPU、主板、硬盘、内存这些硬件。 1&#xff0c;CPU ​ 也叫中央处理器&#xf…

Linux安装MongoDB(简单详细)

目录MongoDB 安装环境1、下载 MongoDB 的linux安装包2、上传 MongoDB 安装包到linux系统中&#xff1a;3、解压 MongoDB 安装包4、创建 MongoDB 必要目录5、移动 MongoDB 安装目录6、设置 MongoDB 环境变量7、添加 MongoDB 配置文件8、启动和关闭 MongoDB启动报错的解决&#x…

【Java 数据结构】双向链表

篮球哥温馨提示&#xff1a;编程的同时不要忘记锻炼哦&#xff01;圆圆的脑袋&#xff0c;大大耳朵&#xff0c;天天敲代码&#xff0c;找找找bug 目录 1、什么是双向链表 2、实现一个双向链表 2.1 实现前的约定 2.2 addFirst 方法 2.3 addLast 方法 2.4 addIndex 方法…

怎么就敢用NodeJS写千万级别的服务后端

前言&#xff1a;NodeJS真的是玩具吗&#xff1f;真有人敢用这个玩具来写后端服务&#xff0c;它能支撑成一个千万级别的用户量级吗&#xff1f;怎么就带着我的团队稀里糊涂把这事而且做成。这篇文章将分享这次项目的并发实践经验。 一、项目背景 老板说&#xff1a;公司要搞战…