MySQL8.x新特性:与mysql5.x的版本区别

MySQL8.x新特性

1.与mysql5.x的区别:MySQL8.x新特性:与mysql5.x的版本区别-CSDN博客

2.窗口函数(Window Functions):MySQL8.x新特性:窗口函数(Window Functions)-CSDN博客

引言

MySQL是开源关系型数据库的代表,广泛应用于不同规模的Web和企业应用中。从MySQL5.x到MySQL8.x的升级带来了大量功能的改进和性能提升。

1.性能改进

1.1窗口函数**(Window Functions)**

MySQL8.x

支持窗口函数,窗口函数可以简化复杂查询,避免多层嵌套子查询,语法:

sql 复制代码
SELECT 
	WINDOW_FUNCTION() OVER(
		[PARTITION BY `字段1`, `字段2`, ...]
		[ORDER BY `字段3`, `字段4`]
		[FRAME_CLAUSE]
	) [AS `别名`]
FROM `表名` ;

MySQL5.x

不支持窗口函数,需通过子查询或复杂JOIN实现类似功能。

1.2公共表表达式(Common Table Expressions CTE)

MySQL8.x

支持递归和非递归的公共表表达式(CTE)。CTE提高复杂查询的可读性和维护性。语法:

sql 复制代码
WITH RECURSIVE cte_name AS
(
  SELECT ...      <-- specifies initial set
  UNION ALL
  SELECT ...      <-- specifies how to derive new rows
)

MySQL5.x

不支持CTE。

1.3索引优化

MySQL8.x

支持隐藏索引(Invisible Indexes),可以临时禁用索引而不删除。

sql 复制代码
ALTER TABLE my_table ALTER INDEX idx_name INVISIBLE;

支持降序索引(Descending Indexes),优化ORDER BY column DESC查询。

sql 复制代码
CREATE INDEX idx_name ON my_table (column DESC);

MySQL5.x

不支持隐藏锁芯和降序索引。

2.JSON功能增强

MySQL8.x

新增JSON操作符->>,替代JSON_UNQUOTE(JSON_EXTRACT())。

sql 复制代码
SELECT json_column->>'$.key' FROM my_table;

支持JSON路径表达式(JSON_PATH),增强JSON的数据查询能力

新增函数:

JSON_TABLE():将JSON数据转换为表格形式。

JSON_MERGE_PATCH():合并JSON文档。

JSON_STORAGE_SIZE:返回JSON数据的存储大小。

MySQL5.x

JSON功能较为基础,仅支持JSON_EXTRACT()、JSON_ARRAY()、JSON_OBJECT()等。

3.安全性改进

3.1默认身份验证插件

MySQL8.x

默认使用caching_sha2_password插件,提供更强的密码加密。

注意:旧客户端可能不兼容,需升级或显式修改插件:

sql 复制代码
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';

MySQL5.x

默认使用mysql_native_password插件。

3.2角色管理

MySQL8.x

支持角色(Roles),简化权限管理。

sql 复制代码
CREATE ROLE 'read_only';
GRANT SELECT ON db.* TO 'read_only';
GRANT 'read_only' TO 'user'@'host';

MySQL5.x

需手动分配权限,无角色支持。

3.3密码策略

MySQL8.x

支持密码过期策略、密码复用限制、密码强度检查等。

sql 复制代码
SET GLOBAL validate_password.policy = STRONG;

MySQL5.x

需通过插件实现部分功能。

4.数据字典

MySQL8.x

重构数据字典,将系统表(如information_schema)存储在 InnoDB 引擎中。

支持原子 DDL 操作(Atomic DDL),DDL 操作要么完全成功,要么回滚。

MySQL5.x

数据字典存储在 MyISAM 表中,不支持原子 DDL。

5.字符集与编码

MySQL8.x

默认字符集从latin1改为utf8mb4,全面支持 Unicode(包括表情符号)。

支持utf8mb4_0900_ai_ci校对规则,提供更准确的排序和比较。

MySQL5.x

默认字符集为latin1,需手动修改为utf8mb4。

6.资源管理

MySQL8.x

支持资源组(Resource Groups),可限制 CPU 和线程优先级。

sql 复制代码
CREATE RESOURCE GROUP my_group TYPE = USER VCPU = 0-1 THREAD_PRIORITY = 5;
SET RESOURCE GROUP my_group FOR thread_id;

MySQL5.x

无此功能。

7.InnoDB 改进

MySQL8.x

支持原子DDL(Atomic DDL),DDL 操作要么完全成功,要么回滚。

自增列(AUTO_INCREMENT)持久化,重启后不会重置。

支持并行构建全文索引。

MySQL5.x

不支持原子 DDL 和自增列持久化。

8.配置参数变化

MySQL8.x

移除或弃用部分旧参数(如query_cache_type、innodb_cache_type、innodb_file_format)。

新增参数(如innodb_dedicated_server自动配置 InnoDB 内存)。

MySQL5.x

使用旧参数,需手动调优。

9.备份与恢复

MySQL8.x

支持备份锁(Backup Lock),允许在线备份期间执行 DML 操作(仅阻塞 DDL)。

sql 复制代码
LOCK INSTANCE FOR BACKUP;
UNLOCK INSTANCE;

MySQL5.x

无备份锁功能。

10.事务与隔离级别

MySQL8.x

默认事务隔离级别为REPEATABLE READ(与 5.7 一致)。

支持NOWAIT和SKIP LOCKED选项,优化锁竞争场景。

sql 复制代码
SELECT * FROM my_table FOR UPDATE NOWAIT;

MySQL5.x

不支持NOWAIT和SKIP LOCKED。

11.复制与高可用

MySQL8.x

增强 Group Replication(组复制)的性能和稳定性。

支持并行复制(基于 WriteSet 的多线程复制)。

默认启用二进制日志的校验和(binlog_checksum=CRC32)。

MySQL5.x

并行复制功能较弱。

12.优化器改进

MySQL8.x

支持 直方图统计(Histogram Statistics),提升复杂查询的执行计划选择。

支持 跳过索引扫描(Skip Scan Index Access)。

MySQL5.x

不支持直方图和跳过索引扫描。

13.性能模式(Performance Schema

MySQL8.x

增强性能模式,支持更多监控指标(如事务、锁、内存使用等)。

MySQL5.x

性能模式功能较少。

14.移除的功能

MySQL8.x

移除Query Cache(查询缓存),因多核扩展性问题。

移除password()函数,改用 SHA2 加密

MySQL5.x

支持Query Cache和password()函数。

15.总结

|----------|-----------------------|-----------------------|
| 特性 | MySQL5.x | MySQL8.x |
| 查询性能 | 较低 | 显著提升,支持窗口函数和并行查询 |
| JSON 支持 | 基础支持 | 增强支持,支持 JSON 表函数 |
| 窗口函数 | 不支持 | 支持 |
| CTE | 不支持 | 支持 |
| 角色管理 | 不支持 | 支持 |
| 默认身份验证插件 | mysql_native_password | caching_sha2_password |
| 原子 DDL | 不支持 | 支持 |
| 自增列持久化 | 不支持 | 支持 |
| 数据字典 | 文件存储 | InnoDB 表存储 |
| 默认字符集 | utf8 | utf8mb4 |

相关推荐
darkchink4 分钟前
[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
c语言·数据库·c++·oracle·数据库开发·dba·db
admiraldeworm17 分钟前
Mysql、Oracle、Sql Server、达梦之间sql的差异
mysql·oracle·sqlserver·达梦
卡戎-caryon1 小时前
【MySQL】02.数据库基础
linux·网络·数据库·mysql·存储引擎
ZHOU_WUYI1 小时前
React与Docker中的MySQL进行交互
mysql·react.js·docker
小楠小楠小楠1 小时前
Redis的主从架构
数据库·redis·架构
苹果酱05672 小时前
React方向:react脚手架的使用
java·vue.js·spring boot·mysql·课程设计
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 101-110题
数据库·mysql·ocp
码农捻旧2 小时前
Node.js中MongoDB连接的进阶模块化封装
数据库·mongodb·node.js
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 111-120题
数据库·mysql·ocp
spjhandsomeman2 小时前
各个历史版本mysql/tomcat/Redis/Jdk/Apache/gitlab下载地址
java·redis·mysql·jdk·tomcat·gitlab