【MySQL】试题 — 31道巩固 SQL 语句的练习题

数据库98

1.取得每个部门最高薪水的人员名称
先取出每个部门的最高薪水,再作为临时表与(对应最高薪水的人员名称表)连接
select
e.ename,t.*
from
emp e
join
(select deptno,max(sal) as maxsal from emp group by deptno)t
on
t.deptno = e.deptno and t.maxsal = e.sal

  1. 哪些人的薪水在部门的平均薪水之上
    先取出每个部门的平均薪水,再作为临时表与(薪水在其部门平均薪水上的部门名称,薪水表)连接
    select
    t.*,e.ename,e.sal
    from
    emp e
    join
    (select deptno,avg(sal) as avgsal from emp group by deptno)t
    on
    e,deptno = t,deptno and e.sal > t.avgsal;

3.取得部门中所有人的平均薪水等级
找到每个人的薪水等级(emp连接salgrade)
select
e.ename,e.sal,e.deptno,s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal;
基于以上结果继续按照deptno分组,求grade的平均值(直接两张表就行,不需要临时表)
select
e.deptno,avg(s.grade)
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal
group by
e.deptno;

4.不准用组函数(Max),取得最高薪水(给出两种解决方案)
第一种,降序(limit)
select ename,sal from emp order by sal desc limit 1;
第二种方案,表的自连接
select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal

5.取出平均薪水最高的两个部门编号(至少给出两种解决方案)
第一种方案:
select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;

第二种解决方案:
select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t;
select
deptno,avg(sal) as avgsal
from
emp
group by
deptno
having
avgsal = (select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);

6.求平均薪水的等级最低的部门的部门名称
找出最低平均薪水对应的等级
select
grade
from
salgrade
where
(select avg(sal) as avgsal,deptno from emp order by avgsal asc limit 1) between losal and hisal;

找出(等于最低平均薪水的等级对应的)部门名称,平均薪水,等级
select
t.*,s.grade
from
(select d.dname,avg(sal) as avgsal from emp e join dept on e.deptno = d.deptno group by d.dname) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;
where
s.grade = (select grade from salgrade where (select avg(sal) as avgsal,deptno from emp order by avgsal asc limit 1)
between losal and hisal);

7.取出比普通员工(员工代码没有在mgr字段出现的)的最高薪水还要高的领导人姓名
注意:not in 在使用时,后面小括号里记得排除 null
找到普通员工的最高薪水
select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);
找到高于(普通员工的最高薪水)的员工
select
ename,sal
from
emp
where
sal > (select max(sal)
from
emp
where
empno not in(select distinct mgr from emp where mgr is not null));

8.取出薪水最高的前五名
select ename,sal from emp order by sal desc limit 5;

9.取出薪水最高的第六到第十的员工
select ename,sal from emp order by sal desc limit 5,5;

10.取出最后入职的5名员工;
select ename,hiredate from emp order by hiredate desc limit 5;

11.取出每个薪水等级有多少个员工
select
s.grade,count(*)
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal
group by
s.grade;

12.列出所有员工及领导的名字
select
a.ename '员工',b.ename '领导'
from
emp a
left join
emp b
on
a.mgr = b.empno;

13.列出受雇日期早于直接上级的所有员工的姓名,受雇日期,直接上级的姓名,受雇日期,部门名称
select
a.empno '员工',a.hiredate,b.ename '领导',b.hire date,d.dname
from
emp a
join
emp b
on
a.mgr = b.empno
join
dept d
on
a.deptno = d.deptno
where
a.hiredate < b.hiredate;

14.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
select
e.*,d.dname
from

emp e
right join
dept d
on
e.deptno = d.deptno;

15.列出至少有5个员工的所有部门
select
deptno
from
emp
group by
deptno
having
count(*) >= 5;

16.列出薪水比"SMITH"多的所有员工
select
ename,sal
from
emp
where
sal > (select sal from emp where ename = 'SMITH');

17.列出最低薪水大于1500的各种工作及其从事此工作的全部雇员人数
select
job,count(*)
from
emp
group by
job
having
min(sal) > 1500;

18.列出在部门"SALES"
select
ename
from
emp
where
deptno = (select deptno from dept where dname = 'SALES');

19.列出薪水高于公司平均薪水的所有员工,所在部门,上级领导,雇员的工资等级
select
e.ename '员工',d.dname,l.ename '领导',s.grade
from
emp e
join
dept d
on
e.empno = d.deptno
left join
emp l
on
e.mgr = l.empno
join
salgrade s
on
e.sal between s.losal and s.hisal
where
e.sal > (select avg(sal) from emp);

20.列出与"SCOTT"从事相同工作的所有员工及其部门名称
select
e.ename,e.job,d.dname
from
emp e
join
dept d
on
e.deptno = d.deptno
where
e.job = (select job from emp where ename = 'SCOTT')
and e.name <> 'SCOTT';

21.列出薪水等于部门30中员工的薪水的其他员工的姓名和薪水
select
ename,sal
from
emp
where
sal in(select distinct sal from emp where deptno = 30)
and
deptno <> 30;

22.列出薪水高于在部门30工作的所有员工的薪水的员工姓名和薪水,部门名称
select
e.ename,e.sal,d.dname
from
emp e
join
dept d
on
e.deptno = d,deptno
where
e.sal > (select max(sal) from emp where deptno = 30) ;

23.列出在每个部门工作的员工数量,平均工资和平均服务期限
select
d.deptno,
count(e.ename) as ecount,
ifnull(avg(e.sal),0) as avgsal,
ifnull(avg(timestampdiff(YEAR,hiredate,now())),0) as avgtime
from
emp e
right join
dept d
on
e.deptno = d.deptno
group by
d.deptno;

计算两个时间间隔的函数,语法为:

timestampdiff(间隔类型,前一个日期,后一个日期)
返回日期间的整数差。
FRAC_SECOND 表示间隔是毫秒
SECOND 秒
MINUTE 分钟
HOUR 小时
DAY 天
WEEK 星期
MONTH 月
QUARTER 季度
YEAR 年

24.列出所有员工的姓名,部门名称,和薪水
select
e.ename,d.dname,e.sal
from
emp e
join
dept d
on
e.deptno = d.deptno;

25.列出所有部门的详细信息和人数
select
d.deptno,d.dname,d.loc,count(e.ename)
from
emp e
join
dept d
on
e.deptno = d.deptno
group by
d.deptno,d.name,d.loc;

26.列出各种工作的最低工资及从事此工作的雇员姓名
select
e.ename,t.*
from
emp e
join
(select job,min(sal) as minsal from emp group by job)t
on
e.job = t.job and e.sal = t.,minsal;

27.列出各个部门MANAGER(领导)的最低薪水
select
deptno,min(sal)
from
emp
where
job = 'MANAGER'
group by
deptno;

28.列出所有员工的年工资,按年薪从低到高排序
select
ename,(sal + ifnull(comm,0))*12 as yearsal
from
emp
order by
yearsal asc;

29.求出员工领导薪水超过3000的员工名称和领导
select
a.ename '员工',b.ename '领导'
from
emp a
join
emp b
on
a.mgr = b.empno
where
b.sal > 3000;

30.求出部门名称带'S'的部门员工的工资合计,部门人数
select
d.deptno,d.dname,d.loc,count(e.ename),ifnull(sum(e.sal),0) as sumsal
from
emp e
right join
dept d
on
e.deptno = d.deptno
where
d.dname like '%S%'
group by
d.deptno,d.name,d.loc;

31.给任职日期超过30年的员工加薪 10%
update
emp
set
sal= sal*1.1 where timestampdiff(YEAR,hiredate,now())>30;

ps:博主少写了3道哟! ( •̀ ω •́ )✧

Original: https://www.cnblogs.com/Burning-youth/p/15685482.html
Author: 猿头猿脑的王狗蛋
Title: 【MySQL】试题 --- 31道巩固 SQL 语句的练习题



相关阅读1

Title: MySQL源码解析之执行计划

  • MySQL执行计划介绍
  • MySQL执行计划代码概览
  • MySQL执行计划总结

一、MySQL执行计划介绍

在MySQL中,执行计划的实现是基于 JOINQEP_TAB这两个对象。其中JOIN类表示一个查询语句块的优化和执行,每个select查询语句(即Query_block对象)在处理的时候,都会被当做JOIN对象,其定义在 sql/sql_optimizer.h

QEP_TABQuery Execution Plan Table的缩写,这里的表Table对象主要包含物化表、临时表、派生表、常量表等。 JOIN::optimize()是优化执行器的统一入口,在这里会把一个查询语句块 Query_block最终优化成 QEP_TAB

MySQL-8.0.22版本之后,又引入访问方式 AccessPath和执行迭代器 Iterator对象,再结合JOIN和QEP_TAB对象,最终得到整个解析计划的执行路径。

二、MySQL执行计划代码概览

本文主要 基于MySQL-8.0.25版本,进行说明。

优化器的入口函数: bool JOIN::optimize(),对应代码文件 sql/sql_optimizer.cc

// &#x4E3B;&#x8981;&#x529F;&#x80FD;&#x662F;&#x628A;&#x4E00;&#x4E2A;&#x67E5;&#x8BE2;&#x5757;Query_block&#x4F18;&#x5316;&#x6210;&#x4E00;&#x4E2A;QEP_TAB&#xFF0C;&#x5F97;&#x5230;AccessPath
bool JOIN::optimize() {
    ...
    // &#x4E0B;&#x9762;&#x4E3B;&#x8981;&#x662F;&#x4E3A;&#x4E86;&#x53EF;&#x4EE5;&#x501F;&#x52A9;INFORMATION_SCHEMA.OPTIMIZER_TRACE&#x8868;&#xFF0C;&#x8DDF;&#x8E2A;&#x4F18;&#x5316;&#x5668;&#x7684;&#x6267;&#x884C;&#x72B6;&#x6001;&#x548C;&#x6267;&#x884C;&#x6B65;&#x9AA4;
    Opt_trace_context *const trace = &thd->opt_trace;
    Opt_trace_object trace_wrapper(trace);
    Opt_trace_object trace_optimize(trace, "join_optimization");
    trace_optimize.add_select_number(Query_block->select_number);
    Opt_trace_array trace_steps(trace, "steps");
    ...
    // &#x7A97;&#x53E3;&#x51FD;&#x6570;&#x88C5;&#x914D;&#x4F18;&#x5316;
    if (has_windows && Window::setup_windows2(thd, m_windows))
    ...
    // &#x62F7;&#x8D1D;Query_block&#x4E0A;&#x7684;&#x6761;&#x4EF6;&#x526F;&#x672C;&#x5230;JOIN&#x7ED3;&#x6784;&#x5173;&#x8054;&#x7684;&#x6210;&#x5458;&#x5BF9;&#x8C61;&#xFF0C;&#x4E3A;&#x540E;&#x7EED;&#x4F18;&#x5316;&#x505A;&#x51C6;&#x5907;
    if (Query_block->get_optimizable_conditions(thd, &where_cond, &having_cond))
    ...
    // &#x7EDF;&#x8BA1;&#x62BD;&#x8C61;&#x8BED;&#x6CD5;&#x6811;&#x4E2D;&#x7684;&#x53F6;&#x8282;&#x70B9;&#x8868;&#xFF0C;&#x5176;&#x4E2D;leaf_tables&#x662F;&#x5728;Query_block::setup_tables&#x4E2D;&#x8FDB;&#x884C;&#x88C5;&#x914D;
    tables_list = Query_block->leaf_tables;
    ...
    // &#x5206;&#x533A;&#x88C1;&#x526A;
    if (Query_block->partitioned_table_count && prune_table_partitions()) {
    ...
    // &#x5C1D;&#x8BD5;&#x628A;&#x805A;&#x5408;&#x51FD;&#x6570;COUNT()&#x3001;MIN()&#x3001;MAX()&#x5BF9;&#x5E94;&#x7684;&#x503C;&#xFF0C;&#x66FF;&#x6362;&#x6210;&#x5E38;&#x91CF;
    if (optimize_aggregated_query(thd, Query_block, *fields, where_cond,
                                                                &outcome)) {
    ...
    // &#x91C7;&#x7528;&#x8D85;&#x56FE;&#x7B97;&#x6CD5;&#x751F;&#x6210;&#x6267;&#x884C;&#x8BA1;&#x5212;&#xFF0C;&#x6CE8;&#x610F;&#x8D85;&#x56FE;&#x7B97;&#x6CD5;&#x901A;&#x8FC7;set optimizer_switch="hypergraph_optimizer=on"&#x65B9;&#x5F0F;&#x542F;&#x7528;
    if (thd->lex->using_hypergraph_optimizer) {
        FindBestQueryPlan(thd, Query_block, /*trace=*/nullptr);
        // &#x5982;&#x679C;Join&#x4F18;&#x5316;&#x5668;&#x662F;&#x8D85;&#x56FE;&#x7B97;&#x6CD5;&#xFF0C;&#x5904;&#x7406;&#x7ED3;&#x675F;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;
        return false;
    }
    ...

下面代码主要涉及Join优化器连接方式为 左深树的情况,主要用到 join_tab数组来进行组织关联

根据代价计算表的连接方式,核心函数 make_join_plan(),实现非常复杂。比较关键的函数是 bool Optimize_table_order::choose_table_order()

其主要思想是通过贪婪搜索 Optimize_table_order::greedy_search,根据最小的连接代价,进行有限的穷举搜索(细节参考Optimize_table_order::best_extension_by_limited_search)

最终找到近似最优解的连接排列组合

    if (make_join_plan()) {
    ...
    // &#x8BED;&#x53E5;&#x5757;&#x8C13;&#x8BCD;&#x6761;&#x4EF6;&#x4E0B;&#x63A8;&#xFF0C;&#x63D0;&#x5347;&#x8FC7;&#x6EE4;&#x6027;&#x80FD;
    if (make_join_Query_block(this, where_cond)) {
    ...
    // &#x4F18;&#x5316;order by/distinct&#x8BED;&#x53E5;
    if (optimize_distinct_group_order()) return true;
    ...
    // &#x5206;&#x914D;QEP_TAB&#x6570;&#x7EC4;
    if (alloc_qep(tables)) return (error = 1); /* purecov: inspected */
    ...
    // &#x6267;&#x884C;&#x8BA1;&#x5212;&#x7EC6;&#x5316;&#xFF0C;&#x4F18;&#x5316;&#x5B50;&#x67E5;&#x8BE2;&#x548C;&#x534A;&#x8FDE;&#x63A5;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5177;&#x4F53;&#x7B56;&#x7565;&#x53EF;&#x4EE5;&#x53C2;&#x8003;mariadb&#x7684;&#x6587;&#x6863;&#xFF1A;
    // https:// mariadb.com/kb/en/optimization-strategies/
    // &#x5173;&#x952E;&#x4EE3;&#x7801;&#x662F;setup_semijoin_dups_elimination&#xFF0C;&#x4E3B;&#x8981;&#x5BF9;&#x534A;&#x8FDE;&#x63A5;&#x5173;&#x8054;&#x7684;&#x7B56;&#x7565;&#x8FDB;&#x884C;&#x88C5;&#x914D;
    if (make_join_readinfo(this, no_jbuf_after))
    ...
    // &#x4E3A;&#x5904;&#x7406;group by/order by&#x521B;&#x5EFA;&#x5F00;&#x8F9F;&#x4E34;&#x65F6;&#x8868;&#x7A7A;&#x95F4;
    if (make_tmp_tables_info()) return true;
    ...
    // &#x751F;&#x6210;&#x8BBF;&#x95EE;&#x65B9;&#x5F0F;AccessPath&#xFF0C;&#x4F9B;&#x540E;&#x7EED;&#x8FED;&#x4EE3;&#x5668;Iterator&#x8BBF;&#x95EE;&#x4F7F;&#x7528;
    create_access_paths();
    ...
    return false;
}

三、MySQL执行计划总结

MySQL的执行计划是整个数据库最核心的模块,其代码也在不断地迭代更新过程中。执行计划中优化器的好坏和背后的搜索策略、数学模型紧密相关。MySQL支持的搜索策略有穷举搜索、贪婪搜索,对应的Join优化器有左深树算法和超图算法,整个优化过程主要是基于CBO策略进行优化。

执行计划运行的过程, 实际上就是一个动态规划的过程。这个过程的优劣,快慢决定了MySQL和主流商业数据库的差距。只有深入地理解MySQL优化器的运行原理,才能帮助我们积极有效地探索更高性能优化的可能。
最后由于笔者知识水平有限,疏漏之处,还望斧正。

Enjoy GreatSQL 😃

文章推荐:

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

微信&QQ群:

QQ群: 533341697

微信群:可搜索添加 GreatSQL&#x793E;&#x533A;&#x52A9;&#x624B;微信好友,发送验证信息"加群"加入GreatSQL/MGR交流微信群

GreatSQL社区助手: wanlidbc

Original: https://www.cnblogs.com/greatsql/p/16560603.html
Author: GreatSQL
Title: MySQL源码解析之执行计划

相关阅读2

Title: ImageIo.read 返回null

一、问题描述

今天收到一个bug就是imageio读取图片会返回null,具体如下

【MySQL】试题 — 31道巩固 SQL 语句的练习题

但是其他的图片就没有问题

【MySQL】试题 — 31道巩固 SQL 语句的练习题

二、问题分析

结合百度发现这张图片原本的后缀并非是jpg,使用notpard++打开就可以发现

【MySQL】试题 — 31道巩固 SQL 语句的练习题

好家伙是webp格式的!!!!

WebP是google开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。是现代图像格式,提供了优越的无损和有损压缩的图片在网络上。使用WebP,网站管理员和web开发人员可以创建更小、更丰富的图像,使网页更快。

WebP无损的png图像小26%。WebP有损图像是25 - 34%小于等效SSIM质量指数可比JPEG图像

无损WebP支持透明(也称为alpha通道)的成本只有22%额外的字节。对有损压缩RGB压缩情况下是可以接受的,有损WebP还支持透明度,通常提供3×PNG相比较小的文件大小。

但是!!!由于Webp格式推出比较晚, Jdk 内置的图片编解码库对此并不支持。我只需要知道如何把webp格式转换成jpg或者其他格式就可以了!!!

【MySQL】试题 — 31道巩固 SQL 语句的练习题

三、解决问题

1、在百度找到一个api(地址如下)

我是地址
友情建议,最好用0.1.0哪个版本的其他版本试了都有问题~~~~~~

2、由于这个项目并未发布到maven中央仓库,所以需要手动导入本地jar包.

(1)、maven导包

<dependency>
  <groupid>com.github.nintha</groupid>
  <artifactid>webp-imageio-core</artifactid>
  <version>{versoin}</version>
  <scope>system</scope>
  <systempath>${project.basedir}/libs/webp-imageio-core-{version}.jar</systempath>
</dependency>

(2)、gradle导包

dependencies {
  compile fileTree(dir:'src/main/resources/libs',include:['*.jar'])
}

当然了,你想放在自己仓库中也是无可厚非的

3、上代码

(1)、Webp编码

public static void main(String args[]) throws IOException {
  String inputPngPath = "test_pic/test.png";
  String inputJpgPath = "test_pic/test.jpg";
  String outputWebpPath = "test_pic/test_.webp";

  // Obtain an image to encode from somewhere
  BufferedImage image = ImageIO.read(new File(inputJpgPath));

  // Obtain a WebP ImageWriter instance
  ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();

  // Configure encoding parameters
  WebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());
  writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT);

  // Configure the output on the ImageWriter
  writer.setOutput(new FileImageOutputStream(new File(outputWebpPath)));

  // Encode
  writer.write(null, new IIOImage(image, null, null), writeParam);
}

(2)、Webp解码

public static void main(String args[]) throws IOException {
  ImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next();

  WebPReadParam readParam = new WebPReadParam();
  readParam.setBypassFiltering(true);

  // Configure the input on the ImageReader
  reader.setInput(new FileImageInputStream(new File(webp&#x56FE;&#x7247;&#x5730;&#x5740;)));

  // Decode the image
  BufferedImage image = reader.read(0, readParam);

  ImageIO.write(image, "jpg", new File(&#x8F93;&#x51FA;jpg&#x7684;&#x5730;&#x5740;&#xFF0C;png&#x4EC0;&#x4E48;&#x7684;&#x4E5F;&#x53EF;&#x4EE5;));
}

搞完收工!
【MySQL】试题 — 31道巩固 SQL 语句的练习题

Original: https://www.cnblogs.com/pkkyh/p/14659327.html
Author: 迷途者寻影而行
Title: ImageIo.read 返回null

相关阅读3

Title: centos8安装mysql

前言

最近在centos8系统下部署django项目时,要用到mysql数据库,在安装中遇到了点坑,之后参考了一位博主的文章,也是顺利的安装配置成功,博主原文连接:

((20条消息) centos8安装mysql8.0.22教程(超详细)_上善若水滴世界的博客-CSDN博客_centos mysql8安装)

我写这篇文章是为了以后便于查找,怕找不到,所以内容和原博主并无多大的差别。

安装步骤如下:

1.1 首先用xshell远程连接到服务器

1.2 如果服务器之前安装过mysql请先卸载,我这里是用yum安装的,现在通过yum去卸载

yum remove -y mysql
find / -name mysql //找到残留的文件,再通过rm -rf去删除对应的文件

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.3 卸载完成后,使用以下命令:

下载mysql安装包:

wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
yum install mysql80-community-release-el8-1.noarch.rpm

成功示意图:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.4 检查数据源

查看mysql源是否安装成功:

yum repolist enabled | grep "mysql.*-community.*"

示意图:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.5 禁用CentOS8自带mysql模块

如果出现No match for argument: mysql-community-server
可执行 yum module disable mysql命令

yum module disable mysql // 禁用命令

示意图:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.6 安装mysql命令

前面都是必不可少的准备工作,现在才是重点:

yum install mysql-community-server 这一步的时候可能很多人安装不上,
因为是yum安装库的问题,错误(Error: GPG check FAILED),可以将--nogpgcheck添加到后面:
yum install mysql-community-server --nogpgcheck

【MySQL】试题 — 31道巩固 SQL 语句的练习题

Is this ok [y/Y] 一直 y到底

1.7 启动mysql

在启动mysql时,遇到了一个问题:

[root@iZuf6hx48jsavuzwp5hv7jZ soft]# service mysqld start //启动命令

遇到问题:

[root@iZuf6hx48jsavuzwp5hv7jZ soft]# service mysqld start
Redirecting to /bin/systemctl start mysqld.service//错误提示

正确启动命令:

[root@iZuf6hx48jsavuzwp5hv7jZ soft]# /bin/systemctl start mysqld.service//启动命令
[root@iZuf6hx48jsavuzwp5hv7jZ soft]# service mysqld status //

示意图:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.8 显示mysql的随机密码

grep 'temporary password' /var/log/mysqld.log

密码是host:后面的一串字符。

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.9 登录并修改mysql密码

mysql -u root -p //输入上面生成的密码

修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_21root';

修改密码需要注意,这里密码先修改成 "Root_21root",因为我们随便修改密码时,一般都不满足它的策略

修改密码长度:
set global validate_password.length=1; //(长度)
修改密码等级:
set global validate_password.policy=0; //(等级)

设置成自己想要的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

修改前策略:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

修改后策略:

【MySQL】试题 — 31道巩固 SQL 语句的练习题

1.10 Mysql8.0.22开放远程访问

这部分我没试过,如有需要请查看原博主文章

Original: https://www.cnblogs.com/minqiliang/p/16577102.html
Author: minqiliang
Title: centos8安装mysql