mysql8新特性一

MySQL 8.0的新特性与升级 一、MySQL 8.0主要新特性 1、性能峰值几乎是5.7的两倍 2、可快速在线新增列——instant add new column 3、可并行写入redo log,提升大量事务写入时的性能 4、可在线调整redo log buffer和undo log相关设置 5、可针对单个会话SET_VAR设置变量,提升灵活性 6、新增更多数据字典,元数据全部采用InnoDB引擎存储,无frm文件 7、自增列持久化,解决了服务重启后自增值回退的问题 8、可在线持久化配置(set persist会生成m 阅读详情

一、账户与安全

1.用户的创建与授权

  在MySQL5.7的版本:

  > grant all privileges on *.* to '用户名'@'主机' identified by '密码';

  在MySQL8.0需要分开执行:

  >create user '用户名'@'主机' identified by '密码';

  >grant all privileges on *.* to '用户名'@'主机';

  用以前的一条命令在8.0里面创建用户,会出现sql语法错误
 

2.认证插件更新

  MySQL5.7默认身份插件是mysql_native_password

  MySQL8.0默认的身份插件是caching_sha2_password
  查看身份认证插件命令:show variables like 'default_authentication_plugin%';或
select user,host,plugin from mysql.user;


  身份认证插件可以通过以下2中方式改变:    

       1)系统变量default_authentication_plugin去改变,在my.ini文件的[mysqld]下面设置default_authentication_plugin=mysql_native_password即可
  2)如果希望只是某一个用户通过mysql_native_password的方式认证,可以修改数据库mysql下面的user表的字段,

             执行以下命令: alter user '用户名'@'主机' identified width mysql_native_password by '密码';

3.密码管理  

MySQL8.0的密码管理策略有3个变量  

        password_history 修改密码不允许与最近几次使用或的密码重复,默认是0,即不限制    

        password_reuse_interval 修改密码不允许与最近多少天的使用过的密码重复,默认是0,即不限制
  password_require_current 修改密码是否需要提供当前的登录密码,默认是OFF,即不需要;如果需要,则设置成ON  

查询当前MySQL密码管理策略相关变量,使用以下命令:    

>show variables like 'password%';  

1)设置全局的密码管理策略,在my.ini配置文件中,设置以上3个变量的值这种设置方式,需要重启mysql服务器;某些生产环境不允许重启,MySQL8.0提供了关键字persist 持久化,

执行以下命令:  

>set persist password_history=6;  

这条命令会在数据目录下生成新的配置文件(/var/lib/mysql/mysqld-auto.cnf),下次服务器重启的时候除了读取全局配置文件,还会读取这个配置文件,这条配置就会被读入从而达到持久化的目的
 

2)针对某一个用户单独设置密码管理策略  

>alter user '用户名'@'主机' password history 5;  这样,这个用户的password_history 就被设置成了5;

查看一下:  

>show user,host,Password_reuse_history from user; 

4.角色管理

角色:一组权限的集合 一组权限赋予某个角色,再把某个角色赋予某个用户,那用户就拥有角色对应的权限

1)创建一个角色

>create role '角色1'; (角色也是在用户表中mysql.user)

2)为这个角色赋予相应权限

>grant insert,update on *.* to '角色1';

3)创建一个用户

>create user '用户1' identified by '用户1的密码';

4)为这个用户赋予角色的权限

>grant '角色1' on *.* to '用户1';

执行完上面4步,用户1就拥有了插入与更新的权限

5)再创建1个用户

>create user '用户2' identified by '用户2的密码';

6)为这个用户赋予同样的角色

>grant '角色1' on *.* to '用户2'; 执行完上面2步,

用户2也用了角色1的权限,即插入与更新 查看用户权限,执行以下命令:

>show grants for '用户名' [using '角色名'];

7)启用角色,设置了角色,如果不启用,用户登录的时候,依旧没有该角色的权限

> select current_role();查看启用的角色

> set role '角色名';启用角色

>set default role '角色名' to '用户名';设置默认角色

8)如果一个用户有多个角色,使用以下命令

>set default role all to '用户名';

MySQL中与用户角色相关的表:

mysql.default_roles、mysql.role_edges

9)撤销权限

>revoke insert,update on *.* from '角色名';  

 

二、优化器索引

1.隐藏索引(invisible index)

  隐藏索引不会被优化器使用,但仍需要维护

  应用场景:

  1)软删除

    删除索引,在线上,如果删除错了索引,只能通过创建索引的方式将其添加回来,对于一些大的数据库而言,是比较耗性能的;为了避免删错,可以先将其设置为不可见,优化器这时候就不会使用它,但是后台仍然在维护,确定后,再删除。

  2)灰度发布

    与软删除差不多,如果想要测试一些索引的功能或者随后可能会使用到这个索引,可以先将其设置为隐藏索引,对于现有的查询不会产生影响,测试后,确定需要该索引,可以将其设置成可见索引。

  创建隐藏索引,执行如下命令(如果是不隐藏,则不需要后面的invisible关键字):

  >create index 索引名称 on 表名(字段名) invisible;

  查询某一张表的索引,执行如下命令:

  >show index from 表名;

  使用explain语句查看查询优化器对索引的使用情况

  >explain select * from 表名 where 条件;

  查询优化器有很多开关,有一个是use_invisible_indexes(是否使用隐藏索引),默认是off(不适用),将其设置成on,即可使用隐藏索引。查看当前查询优化器的所有开关,执行如下命令:

  >select @@optimizer_switch;

       打开开关

       >set session optimizer_switch="use_invisible_indexes=on";

  设置已经存在的索引为可见或者隐藏,执行如下命令:

  >alter table 表名 alter index 索引名 visible;

  >alter table 表名 alter index 索引名 invisible;
  主键不可以设置为隐藏所以。


2.降序索引(descending index)

  MySQL8.0开始真正支持降序索引,只有InnoDB引擎支持降序索引,且必须是BTREE降序索引,MySQL8.0不在对group by操作进行隐式排序。

mysql5.7

> create table t1(c1 int, c2 int, index idx(c1 asc, c2 desc));

> show create table t1;

> insert into t1(c1,c2) values(1,100),(2,300),(3,110),(4,30);

> explain select * from t1 order by c1,c2 desc\G;

mysql8

> create table t1(c1 int, c2 int, index idx(c1 asc, c2 desc));

> show create table t1;

> insert into t1(c1,c2) values(1,100),(2,300),(3,110),(4,30);

> explain select * from t1 order by c1,c2 desc\G;

> explain select * from t1 order by c1 desc,c2 \G;

3.函数索引

  索引中使用函数表达式
  
  支持降序索引,支持JSON数据节点的索引

  函数索引是基于虚拟列的功能实现的

假设用户表(tb_user)的用户登录账号(username)不需要区分大小写,则可以创建一个函数索引

>create index username_upper_index on tb_user((upper(username)));
这样在查询的时候 SELECT * FROM tb_user WHERE upper(username) = 'ABD123DSJ'; 就会使用索引。

上面的函数索引,也可以通过MySQL5.7已有的虚拟计算列来模拟,为用户表(tb_user)创建新的一列(new_column),这一列是计算列,不需要赋值,它的值就是username的大写。

>alter tbale tb_user add column new_column varchar(10) generated always as (upper(username));

然后给new_column创建一个索引,可以达到模拟MySQL8.0中的函数索引的效果。这样在查询的时候 SELECT * FROM tb_user WHERE upper(username) = 'ABD123DSJ'; 就会使用索引。

 

json数据节点的索引

 ->> (内联路径)运算符,该运算符等效于调用 JSON_UNQUOTE()的结果JSON_EXTRACT()。

> create table emp(data json, index( (CAST(data->>'$.name' as char(30)) )));

> explain select * from emp where CAST(data->>'$.name' as char(30)) = 'abc'\G;

 

三、通用表表达式

1、非递归CTE

> with cte1(id) as (select 1),

cte2(id) as (select id+1 from cte1)

select * from cte1 join cte2;

 

> With cte1(country_id,country_name) as (select id,name from sch_city where level = 0),
 cte2(province_id,province_name) as (select id,name from sch_city where level = 1),
cte3(city_id,city_name) as (select id,name from sch_city where level = 2)
Select a.country_id, country_name,a.province_id, province_name,a.city_id,city_name,a.address 
from sch_address a 
Left join cte1 on a.country_id = cte1.country_id
Left join cte2 on a.province_id = cte2.province_id
Left join cte3 on a.city_id = cte3.city_id;

2、递归CTE

With recursive cte(n) as 
(
Select 1
Union all
Select n+1 from cte where n < 5
) 
Select * from cte;

> Create table employees(id int, name varchar(32), manager_id int);

> Insert into employees values(29,'Pedro',198),(72,'Pierre',29),(123,'Adil',692),(198,'John',333), (692,'Tarek',333),(4610,'Sarah',29);

> Insert into employees(id,name) values(333,'Yasmina');

With recursive employee_paths(id,name,path) as
(
Select id,name,cast(id as char(200))
From employees
Where manager_id is null
Union all
Select e.id,e.name,concat(ep.path,',',e.id)
From employee_paths as ep join employees as e
On ep.id = e.manager_id
)
Select * from employee_paths;

 

With recursive sch_city_paths(id, name, path) as
(
Select id,name,cast(id as char(200))
From sch_city
Where level = 0
Union all
Select c.id,c.name,concat(cp.path,',',c.id)
From sch_city_paths as cp join sch_city as c
On cp.id = c.pid
)
Select * from sch_city_paths;

3、递归限制

递归表达式的查询中需要包含一个终止递归的条件

cte_max_recursive_depath 最大递归层数
max_execution_time

4、CTE小结

通用表表达式与派生表类似,就像语句级别的临时表或视图。

CTE可以在查询中多次引用,可以引用其他CTE,可以递归

CTE支持SELECT/INSERT/UPDATE/DELETE等语句

 

 

 

 

 

 

 

MySQL8.0新特性 MySQL 8版本在功能上 做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。 阅读详情

相关推荐

Mysql 8.0新特性详解

建议使用8.0.17及之后的版本,更新的内容比较多。本文只讲解了一些常用到的新特性。

Myname_China的博客 1306

MySQL 8.0 全新特性详解

MySQL 8.0的这些新特性在数据管理、安全性、性能优化等多个方面进行了改进,为用户提供了更加高效、灵活和安全的数据库管理系统。无论是处理大规模数据、应对高并发场景还是满足多样化的数据处理需求,MySQL 8.0都能提供出色的支持。

weixin_40381772的博客 3204

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文提供了一份基于STM32实现SPWM逆变器控制的完整实战指南。文章从硬件选型(如STM32F103C8T6、IR2104驱动器)入手,详细解析了利用定时器TIM1生成SPWM波形的核心原理与代码实现,并涵盖了驱动电路、全桥功率电路及LC滤波器的设计要点与调试技巧,旨在帮助读者从零构建一个可靠的单相全桥逆变器系统。

weixin_29208327的博客 590

MySql —— 15、MySQL8的一些新特性

目录 1、MySQL8新特性概述 1.1、MySQL8.0新增特性 1.1.1. 更简便的NoSQL支持 1.1.2. 更好的索引 1.1.3.更完善的JSON支持 1.1.4.安全和账户管理 1.1.5.InnoDB的变化 1.1.6.数据字典 1.1.7. 原子数据定义语句 1.1.8.资源管理 1.1.9.字符集支持 1.1.10.优化器增强 1.1.11.公用表表达式 1.1.12.窗口函数 1.1.13.正则表达式支持 1.1.14.内部临时表 1.1.15.日志

Mr_zhangyj的博客 4254

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

深度学习十大算法之Word2Vec

Word2Vec的提出,标志着词嵌入技术的一次重大进步。Word2Vec是一种高效的词嵌入模型,由Google的研究团队于2013年开发。它使用一种称为神经网络的机器学习方法,通过学习大量文本数据,生成能够表达词语间丰富语义关系的词向量。Word2Vec的核心优势在于它能够捕捉到词语之间的细微关系。例如,在Word2Vec模型中,可以通过计算向量之间的距离来估计词语之间的相似度。这不仅能帮助理解语言的复杂性,还可以应用于各种NLP任务,如机器翻译和搜索引擎优化。

第欧根尼的酒桶的博客 1866

MySQL必知之MySQL8新特性(一)

ySQL 8.0带来了多项账户安全改进:1)用户创建与授权必须分开执行;2)默认认证插件改为caching_sha2_password,可能导致旧客户端连接问题;3)增强密码管理,包括密码历史记录限制和旧密码校验功能。

weixin_47088026的博客 602

【软考高项】五十一、常见必会的几种进度网络图(单代号、双代号、七格图、横道图)

软考高项计算题进度网络图画图介绍

有莘不破的博客 3万+

MySQL 8.0 新特性一观

新特性有很多,在此只列举了一下我比较感兴趣的一些内容。 如果想要多了解一些,请参照官方文档。

wangxin3618的博客 458

药物代谢仿真软件:PKSim_(6).案例研究与实践应用

通过本章的案例研究和实践应用,我们展示了如何利用PKSim软件构建药物动力学模型、进行参数估计、仿真预测和结果分析。这些方法不仅有助于优化药物代谢研究过程,还可以在药物研发中提供重要的数据支持。通过模型的构建和验证,我们可以更好地理解药物在体内的动态变化过程,为临床试验和药物治疗提供科学依据。

kkchenjj的博客 655

YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度

摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。

走向CTO的路上... 950

mysql8新特性(一)

https://www.oschina.net/news/95325/mysql-8-0-ga-released http://blog.itpub.net/28218939/viewspace-2154297/ 转载于:https://www.cnblogs.com/igoodful/p/9189883.html

weixin_30347009的博客 68

上位机图像处理和嵌入式模块部署(qmacvisual获取边界点)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在图像处理中,解决了分割的问题之后,下面就是属性信息的提取。在这其中,有一种属性是非常重要的 ,那就是外界轮廓的边界点获取。这个边界点,可以用来计算长度,也可以用来进行直线、圆的拟合,具体的用途取决于现场的实际使用场景。目前qmacvisual支持对边界点的提取,相关控件可以直接用来提取边界点。

嵌入式-老费,一个分享专业嵌入式知识的blog 883

MySQL8.0新特性(一)

1. 默认字符集由latin1变为utf8mb4 在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。 注:在Percona Server 8.0.15版本上测试,utf8仍然指向的是utf8mb3,与官方文档有出入。 Warning | 3719 | 'utf8' is currently ...

October 482

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mysql algorithm copy,mysql 8 新特性一 ALGORITHM=INSTANT 实现的快速DDL

参考 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html在线DDL之 快速增加列(秒级别的),并不会造成业务抖动。该功能自 MySQL 8.0.12 版本引入,是由腾讯游戏DBA团队贡献,我国程序员还是挺厉害的嘛。注意一下,此功能只适用于 InnoDB 表。实际上MySQL 5.7就已支持 Online DDL,虽说大部...

weixin_39805906的博客 1391

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL8.0新特性学习笔记(一):binlog复制策略优化

看一下几个版本以来binlog复制策略的演进。 5.6以前的版本 经典的主从复制模型: 1,Master提交事务。 2,binlog写入binlog文件。 3,Slave的IO线程把Master上的binlog写入Slave的RelayLog。 4,Slave单线程从RelayLog中读取日志并执行。 瓶颈:单线程处理RelayLog太慢。 5.6版本 开始使用库级的...

lkforce 2094

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL 8.0新特性--CTE(一)

1、CTE简介MySQL从8.0开始支持CTE,慢慢地向Oracle学习,CTE确实是个很好用的东西,特别是针对OLAP类型的SQL,可以大大简化,优化SQL.那么什么是CTE呢?个人理解:CTE(common table expression)是一个临时的结果集,类似一个函数,一旦定义好,可以多次调用。2、CTE语法with_clause: WITH[RECURS...

weixin_34168880的博客 781

mysql十三期,第十三期分享:MYSQL8.0新特性(一)

mysql官网:https://www.mysql.com/讲真的我还没来得及吃透5.7,Mysql便从5.7一跃升级到8.0,真是让人猝不及防。但事已至此,能做的只有向前看齐,跟上技术更新的步伐,不断提升自己。8.0版本的更新,在功能上主要体现在以下六点:账户与安全优化器索引通用表表达式窗口函数InnoDB 增强JSON 增强、今天就单独摸索一下第一条:账户与安全1.用户的创建与授权在MySQL...

weixin_40002238的博客 93

MySQL 8.0新特性

yugi987838的博客 244

新特性解读 | MySQL 8.0 索引特性3 -倒序索引

作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。 MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。 比如对于以下的查询,无法发挥索引的最佳性能。 查询一: select * from tb1 where f1 = ... order by id desc; 查询二: select * from tb1 wh...

ActionTech的博客 265

MySQL 8.0新特性(第一篇)—开窗函数

MySQL从5.X直接蹦到8.0时代,从甲骨文收购其之前就是5.1,收购之后5.X版本陆续发布到5.7,8.0可谓是一次突飞猛进的改变,一堆新特性的加持,让MySQL在NoSQL、NewSQL横行的年代,重焕生机。 MySQL在5.X时代,就没有开窗函数,着实让使用SQL的小伙伴们难受啊,我甚至写过一篇MySQL5.X用集合思维来实现开窗函数的功能。开窗函数作为一种高级函数,Oracle早就加持了,终于在8.0版本,MySQL也有了。 开窗函数名([<字段名>...

Max_Leo的博客 649

c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

原创作者:杨涛涛我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引。MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。比如对于以下的查询,无法发挥索引的最佳性能。查询一:select * from tb1 where f1 = ... order by id desc; 查询二:select * from tb1 where f1 = ... order...

weixin_39682560的博客 303

MySQL 5.7即将终止支持,MySQL 8势在必行

在全球主流数据库中,MySQL 一直是流行的开源数据库,拥有广泛的受众。根据 DB-Enginesi 在 2023 年 10 月发布的流行度趋势排名,目前全球前四的数据库依次为 Oracle,MySQL,Microsoft SQL Server 和 PostgreSQL,均为关系型数据库。2023 年 10 ⽉ DB-Engines 数据库排⾏榜MySQL 已连续数年位于流行度前两位同时也有着较高...

图灵教育 497
上一篇: thinkphp隐藏index.php,并支持pathinfo
下一篇: mysql8新特性二
wiscourper_
博客等级 码龄17年 1641粉丝 272原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值