【技术干货】作为测试,你必须知道的MySQL知识(二)

【技术干货】作为测试,你必须知道的MySQL知识(二),第1张

        在上一文章 《 【技术干货】作为测试,你必须知道的MySQL知识(一) 》 中我们已经学了MySQL基础知识。对于 最常用、最重要 的select语句将会在本文与大家分享,带你轻松搞定查询语句。

    学习select之前,需先知道查询语句 逻辑执行顺序 ,了解了逻辑执行顺序,对我们写select语句有帮助,但是需要注意的是,逻辑顺序并不是真正执行的顺序,因为MySQL 优化器 会将SQL子句按最优的路径执行。如果想要查看实际执行顺序,可使用Explain关键字进行分析,获取对应的执行计划。

查询语句的使用都离不开以下的格式:

需要记住,这是学好查询语句的基础~

以上select的逻辑执行顺序如下(前面的序号):

 查询语句中where后面支持多种运算符,进行条件的处理,其中常见运算符包括:比较运算、逻辑运算、模糊查询、范围查询、空判断。

① 等于: =

② 大于: >

③ 大于等于: >=

④ 小于: <

⑤ 小于等于: <=

⑥ 不等于: != 或 <>

① and

② or

③ not

【模糊查询语法】:字段名 like <匹配字段字符串>

【常见的匹配字段字符串】:%、_、[] 、[^]

① in:表示在一个非连续的范围内

② between ... and ...:表示在一个连续的范围内

① 判断为空:is null

② 判断非空:is not null

【注意】:null与''是不同的。

使用JOIN 来联合多表查询,JOIN 按照功能大致分为如下三类:

① INNER JOIN(内连接) : 获取两个表中字段匹配关系的记录。

② LEFT JOIN(左连接) : 获取左表所有记录,即使右表没有对应匹配的记录。

③ RIGHT JOIN(右连接) : 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

->【举个栗子】:对表t_user与表t_order进行内连接

->【举个栗子】:对表t_user与表t_order进行左连接

->【举个栗子】:对表t_user与表t_order进行右连接

① 内连接: 保留两表中交集的记录;

② 左连接: 左表全部保留,右表关联不上用null表示;

③ 右连接: 右表全部保留,左表关联不上的用null表示。

group by语句是根据一个或多个列对结果集进行分组。在分组的列上我们经常会使用到 聚合函数 ,因此,先了解 常用的聚合函数 :

① sum():求和

② avg():求平均数

③ count():统计记录条数

④ max():求最大值

⑤ min():求最小值

【group by语法】:

可以根据某个字段(column_name)进行分组。如果不指定分组字段,默认将所有记录作为一组。

->【举个栗子】: 在emp表中,有3个字段,一个是员工id(id),一个是部门id(dept_id),一个是员工薪水(salary)

【注意】:

①  使用group by的select语句中的字段,应该 出现在 聚合函数 中,或者 出现在 group by 中;

②  having 子句可以使用聚合函数,而 where 子句不能使用。

③从逻辑执行过程可知: where 是没有分组前对所有数据进行过滤, having 是对分组后的数据进行过滤。

子查询是指一个查询语句嵌套在另一个查询语句内部的查询。

->【举个栗子】: 一张user表,有2个字段,一个是名称(name),一个是年龄(age),查询出比小李年龄高的人有哪些?

- >【举个栗子】: 获取员工工资低于所在部门的平均工资的员工信息

    要对某个字段进行降序,可以在查询语句后可使用:order by <排序的字段名>desc

     要对某个字段进行升序,可以在查询语句后可使用:order by <排序的字段名>asc

【注意】:order by默认情况下是升序,asc可省略不写。

     有2个维度的排序时,使用逗号隔开2个排序,优先使用前者进行排序,再使用后者进行排序。

    limit:限制查询数据条数,经常在分页的场景中应用。LIMIT子句接受一个或两个参数。参数值都必须为零或正整数。limit的使用格式:

【参数解释】:

limit N :  返回 N 条记录

offset M :  跳过 M 条记录, 默认 M=0

limit N,M :  从第 N 条记录开始, 返回 M 条记录。

->【举个栗子】:

【注意】:limit的两个参数中:

① 第1个参数:指要返回的第一行的偏移量。第一行的偏移量为0,而不是1;

② 第2个参数:指要返回的记录行数。

  如上面"检索6-15行记录"例子中,第1个参数为5,其实指的是第6行;第2个参数为10,指的是从第6行开始,取10条记录,所以是获取到6-15的记录。

    当需要查询出某个字段不重复的记录时,可以使用distinct来过滤重复的记录,格式如下:

使用distinct可以进行单字段去重、多字段去重、所有字段去重、以及与聚合函数的综合使用。

-->【举个栗子】: student表中有name、age、weight3个字段字段。

    使用distinct之后,只能返回去重的字段,而不能返回其他的字段,可以使用group by进行去重查询,

【注意】:

①  distinct 只能在select语句中使用;

②   distinct 必须在所有字段的最前面;

③ 多个字段去重时,多个字段组合后一样时才会被去重;

④ 列中有null值,当对该列使用distinct子句,将保留一个null值(所有null值被视为相同的值)。

题一:端口被占用:

一方案:进入命令提示符

netstat -ano|findstr 3306 查看哪个程序占用了3306端口

在任务管理器中结束该任务

问题二:“MySQL”服务已经存在:

二方案:可能是以前安装过MySQL,

1、在注册表中删除

在这里插入图片描述

2、命令 sc delete 服务名 从服务列表中删除

在这里插入图片描述

3、重启电脑再安装MySQL

文章知识点与官方知识档案匹配

MySQL入门技能树安装和登录安装

28989 人正在系统学习中

打开CSDN,阅读体验更佳

MySQL卸载后,服务仍然存在的解决方案_yijie199311的博客_mysq...

步骤一 : 删除 MySQL 隐藏文件夹 在C 盘的 ProgramData 下会有一个 MySQL 文件夹,这个文件夹要删除, * ProgramData 是一个隐藏文件夹,需要设置显示隐藏文件夹才能看到 步骤二 : 删除注册表项 (一) Windows 运行框(可通过同时按下...

[已解决] 卸载MySQL系统服务,但还是存在于服务列表里_拾年一剑的博客-C...

C:\WINDOWS\system32>sc delete mysql [SC] DeleteService 成功 C:\WINDOWS\system32>sc delete mysql [SC] DeleteService 失败 1072: 指定的服务已标记为删除。 解决 快捷键 Ctrl + Alt + Delete,打开系统任务管理器,查找 mysql...

最新发布 解决端口被占用问题,安装MySQL出现端口被占用

1. 快捷键 Win +R 打开命令提示符,输出命令: netstat -ano。上图可以看出 占用3306 窗口的 PID值为 13620。选中该程序,鼠标右键,点击“结束任务”

继续访问

解决mysql重装时,3306端口被占用(完整版)

解决方法: 1、打开终端,输入cmd,命令框内输入:netstat -ano 会显示如下图的内容,杀死3306对应端口的进程即可 2、杀死进程 *** 作: taskkill /pid xxx -t -f xxx代表该端口的进程ID,也就是上图中pid一栏 例如:上面3306端口对应的是5392 命令:taskkill /pid 5392 -t -f taskkill /pid 5392 -t -f 结果就显示这样: 如果说不能杀死,可能是权限的问题,用管理员权限打开终端,再执行上述.

继续访问

安装MySQL时,输入mysqld --install后,显式该文件已存在

出现此现象的原因是因为在之前已经安装过mysql并且在卸载时没有删除干净。处理方法:1、以管理员身份运行,输入sc query mysql命令,查看名为mysql的服务2、输入命令:sc delete mysql,删除该mysql 3、再次执行命令:mysqld --install即可...

MySQL卸载后服务依旧存在_daixiangcn的博客_mysql卸载后...

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 解决方案 以管理员身份进入cmd,输入如下命令,删除mysql scdeletemysql 1 运行结果: 图1.cmd窗口 可能出现的问题: ...

MySQL 3306端口被占用

开始-运行-cmd, 输入 netstat -ano, 看第一列,后面的就是端口,找到3306 ,记住对应的PID然后打开任务管理器查看 ->选择列 ->勾上 PID(进程标识符) ->确定 在任务管理器找到刚才的PID的进程,查看是什么程序占用了端口,把它关闭在重新启动mysql就不会包端口被占用的错误了...

继续访问

win10 mysql 卸载不干净,安装提示,已经存在

1.Zip解压后管理员身份运行cmd(系统win10) 2.输入命令cd /d F:\mysql-5.7.19-win32\bin(此为解压目录) 3.输入安装命令mysqld --install 出现问题The service already exists 这是由于之前已经安装过mysql并且没有删除干净 4.重新以管理员身份运行,输入sc query mysql,查...

继续访问

MySql8安装错误信息:The service already exists!

一、错误信息 The service already exists! The current server installed: E:\MySql_8_Package\mysql-8.0.15-winx64\bin\mysqld MySQL 错误分析:我在进行mysqld --install命令的时候出现以上错误信息,该错误提示表示(服务已经存在!)。说明之前已经安装或存在过服务。 继而观察,提示下面的路径是我之前安装的路径。并不是当前安装的路径,最终得知我之前的卸载mysql的时候并没有卸载干净以至有所

继续访问

安装mysql遇到服务已经存在的错误

前言mysql是一个小巧,方便,快捷的数据库软件,虽然5.7版本已经很大,主要是扩展了多别的功能,但是5.5版本还是很小的,只有55mb,学习使用很方便,但是mysql经常因为卸载不干净,会导致无法重新安装数据库,所以下面介绍一种处理方式

继续访问

删除计算机中的某项服务(解决重装MySQL等软件时服务名已存在的问题)

昨天给电脑重装MySQL进行到配置服务时,如下所示,显示服务名MySQL57已被占用 怎么解决这种情况呢 第一种就是将电脑中名字为MySQL57的这个服务删去 第二种是配置MySQL服务时命名一个新的服务名 第二种很简单,我可以将重装的MySQL服务命名为MySQL58或者MySQL59,反正只要不是电脑中已存在的MySQL57就可以了 第一种就相对有点麻烦,具体步骤如下: 1.打开任务管理器,找到“服务”菜单下的MySQL57这个服务进程,右键选择“打开服务” 2.将该服务的服务名复制后点击“取消

继续访问

Windows 安装MySQL时出现(The service already exists)

以管理员的身份运行cmd,然后再进入MySQL的安装目录,下面是我的安装路径。出现 The service already exists!这是由于之前已经安装过MySQL并且没有删除干净。后面的 *** 作,您自己来吧,或者看我的另一个。

继续访问

MySQL卸载后,服务仍然存在的解决方案

步骤一 : 删除 MySQL 隐藏文件夹 在 C 盘的 ProgramData 下会有一个 MySQL 文件夹,这个文件夹要删除, * ProgramData 是一个隐藏文件夹,需要设置显示隐藏文件夹才能看到! 步骤二 : 删除注册表项 (一) Windows 运行框(可通过同时按下 Windows徽标键 + R键来调出这个运行框)中输入 regedit , 打开注册表编辑窗口,逐级打开找到如下项 : HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Servic

继续访问

安装宝塔面板时,一直出现已检测到mysql

解决方法:一定是mysql没有完全卸载。卸载方法:1.程序删除2.文件删除:C盘的Program File,Program File(x86),ProgramData文件夹下的mysql文件(需要显示隐藏的文件)3.注册表删除win+r输入regedit删除:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Ser

继续访问

安装MySQL---已删除服务,却显示服务已存在

安装MySQL过程及问题记录 安装MySQL 安装MySQL zip全过程 安装过程中服务未成功启动 重新安装(命令:mysql --version),报: 于是删除指定服务(命令sc delete MySQL),重新安装(命令:mysql --version),出现同样问题,再次删除显示如下: 解决办法 打开服务管理窗口(计算机–右键–管理),找到服务–MySQL–右键–重新启动(刷新),再...

继续访问

卸载mysql之后,mysql服务仍在,显示读取描述失败,错误代码2

卸载mysql之后,mysql服务仍在,显示读取描述失败,错误代码2 1.删除C盘下的隐藏文件夹ProgramData里面的MySql文件夹。 2.cmd ->regedit 回车,进注册表里面,删除了里面的HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/MySQL, HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Control/MySQL, HKEY_LOCAL_MACHINE/SYSTEM/CurrentCont

继续访问

解决 卸载Mysql后,服务还在的问题

早就听说要是之前装的mysql没卸载干净再次安装会出问题。所以按照网上完全卸载的教程老老实实地卸载掉之前的版本。可再次安装后还是出了个小问题,在命令行net start mysql启动服务的时候还是显示服务已经存在,真是让我有点摸不着头脑了。文件、注册表是已经卸载完全了,现在报的这个问题是服务仍然存在,经过搜寻发现问题在于服务没有移除掉,这时候只需以管理员的身份打开命令行,敲入sc del...

继续访问

重装mysql时3306端口被占用解决方法

如果在安装mysql中出现3306端口不能使用,已经被占用的过程 则需要将该端口号的进程释放即可 根据该思路我们只需要找到该3306的进程号并且消灭进程即可 根据解决思路 方法前言 运行cmd命令消灭进程需要在管理员方式下运行 否则会出现不给消灭不给权限的问题 类似这种不可访问不给权限的设置 为了解决这种设置 正确思路: 在window中搜索命令提示符文,并且以管理员身份运行即可 1.查找进程号 可以使用一条命令netstat -aon|findstr "3306" 2.找到该进程号后消灭其进程号即可

继续访问

热门推荐 cmd启动MySQL服务显示服务名无效,MySQL服务无法启动

问题描述: 使用cmd启动mysql服务时,显示服务名无效。 原因分析: 1、MySQL服务端口被占用。 2、系统中没有注册MySQL到服务中,即当前路径下没有mysql服务。 解决方案: 1.解决服务名无效 (1)在cmd中切换目录到MySQL安装路径下的bin文件中。 如:E:\phpstudy_pro\Extensions\MySQL5.7.26\bin (2)移除MySQL(出现Service successfully install表示 *** 作成功。) m

继续访问

安装MySQL时,输入mysqld --install后,显式该文件已存在

出现此现象的原因是因为在之前已经安装过mysql并且在卸载时没有删除干净。 处理方法:1、以管理员身份运行,输入sc query mysql命令,查看名为mysql的服务 2、输入命令:sc delete mysql,删除该mysql 3、再次执行命令:mysqld --install即可成功 ...

继续访问

mysql 服务已经存在_windows下mysql主从同步时从服务器出现表已经存在解决办法

问题如下:mysql>showslavestatus\G***************************1.row***************************Slave_IO_State:Master_Host:172.168.3.190Master_User:slaveMaster_Port:12148Connect_Retry:60Master_Lo...

继续访问

MySQL安装时输入命令mysqld --initialize --console显示the service is already installed

卸载guomysql后再次安装时,输入命令mysqld --initialize --console显示the service is already installed。1、以管理员身份运行cmd,输入命令查看名为mysql的服务。出现这种问题说明卸载之前的MySQL是并没有卸载干净。3、删除完成后,再次输入安装命令进行安装。2、输入命令删除该mysql服务。

继续访问

mysql端口被占用了如何解决_如何解决Win10安装MYSQL端口被占用?

Windows10系统安装MYSQL端口被占用怎么办?现在越来越多的人从Windows7系统升级到了Windows10系统,相信很多朋友在使用Windows10系统的时候都遇到了端口被占用的情况,MYSQL的端口号默认是3306,最近就有朋友遇到了MYSQL端口被占用的情况,该如何解决?下面小编就为大家介绍一下Win10系统安装MYSQL被占用的解决方法,希望大家会喜欢。Win10系统安装MYSQ...

继续访问

mysql服务已存在

容量: 看硬件

     InnoDB 最大容量64TB ,存储引擎将 InnoDB 表 保存在一个 表空间内( 原始磁盘分区,由数个文件创建)。这样, 表大小 能超过 单独文件最大容量 。

    MySQL 3.22( MyISAM )限制表大小 4GB ,最大表尺寸增加到65536TB(2567 – 1字节)。最大有效表尺寸通常是由 *** 作系统 对 文件大小限制 决定的, 不是 由MySQL内部限制决定。

最多 20亿个表 ,一个表允许定义1024列,每行的最大长度为8092字节(不包括文本和图像类型的长度);

阿里《Java 开发手册》提出 单表行>500w 容量>2GB ,才分库分表

与 MySQL 配置及硬件 有关,实际记录的条数无关。因为表 索引 装载 到内存,InnoDB buffer size 足够 ,才能全加载进内存,查没问题。达量级限时,导致 内存无法存储索引 ,产生磁盘 IO,性能下降。增加硬件配置解决。500w算折中

QPS在8400左右 :400个线程并发,插入100万条记录(4核2.33G、3G内存、SATA硬盘)https://www.iteye.com/blog/wwtang9527-1718292

写: 90-100M/S(机械硬盘,7200转)预计kB_wrtn/s在90M左右

https://www.cnblogs.com/zhiqian-ali/p/6336521.html

show variables like 'max_connections'  mysql当前最大连接数

set global max_connections=1000 设置当前最大连接数为1000;mysql重启时失效,需要长期生效在my.ini 添加 max_connections=1000

从业务使用场景出发,根据RDS套餐类型和线上实际访问流量,来衡量性能指标,以便方便对标实际业务场景。

MySQL 5.7.21 Group Replication

MySQL 5.7.21 Group Replication with Consistent Read

同机房3节点、跨机房3节点

网络异常:长时间延时0.5ms,长时间延时2ms,丢包0.01%

场景1、2的差异可以衡量 跨机房网络 带来的 性能损耗

场景3关注在 网络质量变化 时带来的 性能变化

同机房3节点为 05 06 03    跨机房3节点为 05 06 01

机器部署:同IDC3台(永顺ys 03 05 06),跨IDC1台(广州gz 01)

同IDC RTT(06->05):RTT min/avg/max/mdev = 0.051/0.059/0.070/0.010 ms

跨IDC RTT(01->05):RTT min/avg/max/mdev = 0.739/0.749/0.810/0.027

    跨IDC的网络耗时是同 IDC的1.3倍 ,在设置 延迟0.5ms后 的网络质量:

同IDC RTT(06->05):RTT min/avg/max/mdev = 0.507/0.564/0.617/0.037

跨IDC RTT(01->05):RTT min/avg/max/mdev = 1.199/1.248/1.315/0.046

    跨IDC的网络耗时是 同IDC的2.2倍 ,在设置 延迟2ms后 的网络质量:

同IDC RTT(06->05):RTT min/avg/max/mdev = 1.963/2.054/2.161/0.064 ms

跨IDC RTT(01->05):RTT min/avg/max/mdev = 2.642/2.732/2.835/0.076 ms

参考:http://blog.720ui.com/2019/mysql_why_one_table_500w/?spm=a2c4e.10696291.0.0.26e819a4zY3hrA&aliyun

https://my.oschina.net/u/867417/blog/758690


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8638913.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存