MYSQL 数据库

article/2025/9/25 23:41:51

MySql数据库特点

1、开源数据库,不需要支付额外费用,项目上云首选;

2、关系型数据库,支持多条件场景查询;

3、支持多种存储引擎;

MySql数据库语句执行步骤

1)创建连接,验证用户是否可进行数据库操作

2)查询缓存,若sql语句存在缓存则直接返回缓存结果

3)当不存在缓存结果时,分析sql语句语法,

4)优化sql语句,寻找最优的查询方案

4)查询数据返回结果

MySql数据库select语句执行顺序

第一步:首先对from关联的前两个表做笛卡尔集合,若存在三个以上的表,则是数据量最少的两张表做笛卡尔集合

第二步:应用on筛选器,对于第一步执行出的结果筛选出满足on条件的数据

第三步:如果是outer join则添加外部行,如果是left jion则将左表中on筛选出的数据添加进来,right jion则是将右表筛选出的数据添加进结果集

第四步:如果是多张表,则再将第三张表球笛卡尔积,重复上面的步骤

第五步:应用where筛选器筛选结果

第六步:应用having筛选器删选结果

第七步:使用select查询符合条件的结果

第八步:使用distinct去重

第九步:使用orderby排序

第十步:根据limit取出指定行数据

where语句执行顺序

mysql:从左往右查询,将可以筛选调大部分数据的条件放到前面

oracle:从右往左查询,将可以筛选掉大部分数据的条件放到后面

MySql的几种搜索引擎

首先明确MySql的默认搜索引擎是innodb,支持事务,使用B+树索引,支持行锁;

若要修改搜索引擎可修改配置文件中的defalut-storage-engine

查询数据库当前搜索引擎可通过 show varables like 'default-storage-engine';

查看数据库支持的搜索引擎命令 show engines;或show vliable like ‘having%’;

几种搜索引擎

  • myisam

        不支持事务;不支持外键;锁机制为表锁;

        保存表的行数,因此对于查询表总数较快;

        drop表时先删掉表再重建;

        在磁盘上有三个文件;.from(存储表定义) myd(表数据) myi(表索引);

        支持三种不同形式的存储:动态表、静态表和压缩表

                1)动态表:表字段长度不固定,优点是占用空间少,但频繁修改会产生碎片

                2)静态表:表字段长度固定,虽占用空间多但是存储迅速容易缓存

                3)压缩表:由myisamchk工具创建,每行数据单独压缩,占用空间少

  • innodb

        支持事务;支持外键;锁机制使用行锁;

        不记录表总行数;

        drop表时使用一行行删除数据方式;

        innodb的外键索引,在删除父表数据时,子表需不存在关联数据才可以;

        使用命令set foreign_key_checks=0;临时关闭外键约束,=1可打开外键约束

Mysql 几种搜索引擎的比较_IChen.的博客-CSDN博客_mysql搜索引擎有哪些?

myisam和innodb的B树索引的区别

innodb的B+树叶子节点存储为索引文件本身

myisam的B+树叶子节点存储数据的物理地址,myisam的索引文件和数据文件是分离的

drop、delete和truncate的区别

drop删除表,delete删除执行行,truncate清空表;

当drop和delete和truncate不带where语句执行时,delete和truncate清空表仍保留表结构,但drop之后对应的表也不复存在

执行速度:drop>truncate>delete

redolog和binlog

事务的永久性是依靠redolog保证的,需明确,redolog是innodb特有的;固定空间循环写入

binlog是mysql数据库的server层实现的,所有搜索引擎都可以用;追加写入不覆盖原始记录

binlog三种格式:

1)stament:基于sql语句的复制,根据commit确定数据完整

2)row:基于行的复制,根据XID EVENT确定数据完整

3)mixed:混合模式复制

redolog为什么具有crash-safe能力

crash-safr数据库崩溃后的恢复能力;

redolog是循环写入固定空间的文件,指当文件中的记录已经被写入磁盘之后会从redolog中删除,binlog是追加写入不覆盖原始记录,假设数据库崩溃,binlog无法判断哪些记录还未写入磁盘,而根据redolog的数据特性,将redolog的记录写入数据库即可;

所以只使用binlog是不具备crash-safe能力

mysql的二阶段提交,当数据库crash后,如何保证未写入磁盘的数据写入到内存中

当开启事务后,对于需要落库的数据,程序会先将更新记录写入redolog日志中,此时标记状态为prapre,然后将记录写入到binlog日志中,然后修改redolog的状态为commit,称为二阶段提交;

所以当数据库崩溃时,对于redolog中拥有完成事务的记录,即包含commit的事务可直接写入磁盘,对于prepare状态的数据,若binlog中存在且完整,则可以写入磁盘,若binlog中不存在或不完整,则此部分数据可能事务未提交不必写如磁盘,binlog中有commt标识是否完整;

为什么需要二阶段提交

假设不使用二阶段提交,先写redolog后写binlog,当redolog写完后还未写入binlog时数据库崩溃此时,数据已落库,但是binlog中未存在此数据修改记录,当使用binlog恢复数据时数据不完整;

若先写入binlog后写入redolog,binlog写完数据库崩溃,redolog未写入数据程序认为事务未提交而导致数据错误;

https://bbs.csdn.net/topics/603572653

美团二面:如何解决 bin log 与 redo log 的一致性问题

 误删数据怎么办

首先还是做好权限控制,规范数据库操作,做好sql审核防止数据误删

当数据误删后,可以工具解析binlog,然后通过反转,delete改成insert,update的条件互转等,全量数据备份等操作恢复数据

mysql自增主键不连续

可能是事务数据回滚,唯一主键冲突导致主键不连续

orderby排序的内部原理

mysql会为每个线程分配一块内存用于排序,当排序的数据量小于内存时使用内部排序;

内部排序分为两种:

        1)全字段排序:到索引树上查找满足条件的主键ID,根据主键ID获取数据进行快速排序

        2)rowid排序:通过控制排序的行数据长度保证内存中更多的存放数据

外部排序:当数据量很大时,内存空间不够会借助外部磁盘文件临时辅助排序,mysql会将数据分为几个临时文件,然后进行归并合并为一个大文件

数据库精选 60 道面试题


http://chatgpt.dhexx.cn/article/8GAEr0Oc.shtml

相关文章

【Python】MySQLdb库的使用以及格式化输出字段中的值

一.项目简单介绍 我们获取字段的内容方式有很多种,但基本都要ctrlc(复制)ctrlv粘贴,然后还有手动去更改 而以python作为处理工具将会快很多,本项目需要安装的库:MySQLdb,pandas,numpy 比如我们想要在每个不同的值加上"" 而复制的数据为下图 那么我们每次都要在每行…

图片信息用浏览器显示:data:image/png;base64,+图片内容

最近看到若依图片验证码获取方式时,后台返回的是一串验证码字符串: 例如 /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyM…

图片中隐藏信息——图片隐写术

https://www.jianshu.com/p/72f0d0953ca4 主要原理: 图片是由一个个像素组成的。每个像素由一组(r,g,b)值表示(png格式图片,多一个alpha透明度值)。而对于单个r,g或b,其范围在0~25…

android 获取图片信息 之 ExifInterface

Android--操作图片Exif信息 --------------------------------------------------------------------------------------- 作者:承香墨影 出处:http://plokmju.cnblogs.com/ 更多内容,请阅读本人新书:《Android深入浅出》 欢迎…

图片头文件信息解析

今天发现获取图片的宽高,并不需要把图片完全读完之后再来获取,而只需要读取文件头文件,几十个字节便可以读出文件的宽高。 图片的文件头部存储有该图片相关信息,可以从中读取相应字段,得到尺寸、大小、格式等信息。由于…

图片Exif信息解析(Java实现)

前言 可交换图像文件(Exchangeable Image File,Exif)信息图像在拍摄时保留的相关参数:比如图像信息(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等…

java项目实战:处理图片水印,提取图片信息,生成excel表

在这次应用软件设计课程中,要求从今年的软件杯大赛上的项目选择一个实现。我选的是"网店工商信息提取",具体要求就是:从给出的带水印的图片中提取出企业名称和企业注册号,并根据这些信息生成excel表格。 刚刚开始以为这…

nodejs图片读取

response返回都是html/text,向前台输出一张图片用的image/jpeg,服务器读取图片的时候是按照binary的二进制方式读取,给客户端返回的时候也按照binary二进制的方式返回。 从服务器读取一张图片给客户端输出: 效果:输入localhost:…

[软件工具] 如何批量获取图片信息,尺寸、大小、路径、文件名,然后导出表格或者txt的文本,下面教你使用方法

前几天遇到一个比较棘手的需求: 如何获取几万张图片的大量的图片信息,如尺寸、大小、路径、文件名等等, 去看了百度 好多都是教写批处理的文件信息,对批处理不是很懂,写了几次都没成功 然后做这么一款软件&#xff…

APICloud框架——获取本地图片信息

api.getPicture 获取本地图片放置到服务器上或者在app中预览是app的基本功能,今天使用了APICloud框架的api.getPicture这个api获取到的本地图片预览在app中,就像上传qq头像一样,其实就是这个需求,获取本地照片(拍摄照片…

imagemagick 获取图片信息,放大缩小,指定区域,旋转,边框,draw png压缩问题

Table of Contents 1.获取图片信息 2.放大缩小 -resize 3.放大缩小 -sample 4.指定区域 5.旋转 6.添加边框 7.draw的用法 1.获取图片信息 C:\Users\Administrator>magick identify F:\imagemagick\1.jpg F:\imagemagick\1.jpg JPEG 1440x2560 1440x256000 8-bit sRGB …

解决透视变换后图片信息丢失的问题

问题背景:最近在做图像拼接,思路是首先对输入的两幅图进行特征提取,提取的方法使用的是经典的SIFT(Scale-invariant feature transform)算法;然后进行特征匹配,匹配的思路是将一幅图中的特征点以…

wx.getImageInfo(Object object)获取图片信息

微信小程序第一周总结 总结人:陈曦 wx.getImageInfo(Object object)获取图片信息 在小程序/小游戏中使用网络相关的 API 时,每个微信小程序需要事先设置一个通讯域名,小程序只可以跟指定的域名与进行网络通信。包括普通 HTTPS 请求&#xff…

利用Python实现图片信息隐藏

最近上了一门信息隐藏的课,讲的关于技术层面的内容还是蛮多的,但是我也没记住几个。吭吭,言归正传,这两天要交大作业,自己手动实现一种图像信息隐藏,查了一番资料后,决定Python来做(主要是调用包方便),原理很简单,主要利用修改图像RGB通道的某一通道值来隐藏二维信息…

Python获取图片信息小栗子

1.首先我们需要先导入所需要的包,没有的话可以【 pip install ~】 来获取 import requests from lxml import etree 2.接下来我们要进行UA伪装,伪装的目的就是把电脑伪装成人 因为很多wangzahn都有反扒机制,不进行伪装的话根本就无法进行爬…

线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?

matlab中如何应用regress()函数进行线性回归分析?回归分析是研究一个随机变量与一个或多个普通变量之间的相关系的统计方法。如果做回归分析,有很多软件都已经封装好了的,我们只需直接调用就可以了。例如Matlab中的regress()就是做线性回归分…

[Matlab]篇----回归分析Matlab命令(regress篇)

[Matlab]篇—-回归分析Matlab命令(regress篇) 一、简介 最近在做回归分析方面的东西,网上查阅相关资料,通过实际调试,对调试结果进行总结。 回归分析法指利用数据统计原理,对大量统计数据进行数学处理,并…

回归(Regression )

回归(Regression ) 模型定义 Regression 就是找到一个函数 functionfunction ,通过输入特征 x,输出一个数值 Scalar。 模型应用 股市预测(Stock market forecast) 输入:过去10年股票的变动、…

数学建模:回归分析——regress 函数

matlab中regress 函数 https://jingyan.baidu.com/article/ca41422f6777aa1eae99ed87.htmlhttps://jingyan.baidu.com/article/ca41422f6777aa1eae99ed87.html 结果 附录 1、数据文本:data1_1 0 68 110 121 23 111 100 37 66 110 12 169 50 46 87 117 16 155 25…

[matlab]多元线性回归-regress函数的用法

转载博客原址:https://blog.csdn.net/YinJianxiang/article/details/81464245 回归分析 回归分析 (英语:Regression Analysis) 是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学…