最近在新学MySQL,总结一下今年新发8.0版本的新增功能。

MySQL 8.0是全球最受欢迎的开源数据库的一个非常令人兴奋的新版本,全面改进。一些关键的增强包括:

1. SQL窗口函数,公用表表达式,NOWAIT和SKIP LOCKED,降序索引,分组,正则表达式,字符集,成本模型和直方图。

2. JSON扩展语法,新功能,改进排序和部分更新。使用JSON表函数,您可以使用JSON数据的SQL机制。

3. GIS地理支持。空间参考系统(SRS),以及SRS感知空间数据类型,空间索引和空间功能。

4. 可靠性 DDL语句已变得原子性和崩溃安全,元数据存储在单个事务数据字典中。由InnoDB提供支持!

5. 可观察性性能架构,信息架构,配置变量和错误记录的显着增强。

6. 可管理性远程管理,撤消表空间管理和新的即时DDL。

7. 安全 OpenSSL改进,新的默认身份验证,SQL角色,分解超级特权,密码强度等等。

8. 性能 InnoDB在读/写工作负载,IO绑定工作负载和高争用“热点”工作负载方面明显更好。增加了资源组功能,通过将用户线程映射到CPU,为用户提供一个选项,以针对特定硬件上的特定工作负载进行优化。

MySQL开发人员需要新功能,而MySQL 8.0在诸如SQL,JSON,正则表达式和GIS等领域提供了许多新的和更多需求的功能。开发人员也希望能够存储Emojis,因此UTF8MB4现在是8.0中的默认字符集。最后,数据类型得到了改进,在BINARY数据类型上进行了按位操作,并改进了IPv6和UUID功能。

今天在这里主要介绍SQL窗口函数和JSON扩展语法。

SQL窗口函数

MySQL 8.0的窗口功能,与分组集合函数类似,窗口函数对一组行进行一些计算,例如COUNT或SUM。但是,如果分组聚合将这组行集合到一行中,则窗口函数将为结果集中的每一行执行聚合。

窗口函数有两种形式:用作窗口函数和专用窗口函数的SQL聚合函数。这是MySQL中支持窗口化的集合函数集合:COUNT,SUM,AVG,MIN,MAX,BIT_OR,BIT_AND,BIT_XOR,STDDEV_POP(及其同义词STD,STDDEV),STDDEV_SAMP,VAR_POP(及其同义词VARIANCE)和VAR_SAMP。这组专门的窗口函数是:RANK,DENSE_RANK,PERCENT_RANK,CUME_DIST,NTILE,ROW_NUMBER,FIRST_VALUE,LAST_VALUE,NTH_VALUE,LEAD和LAG

对窗口函数(又名分析函数)的支持是一种频繁的用户请求。窗口函数一直是标准SQL(SQL 2003)的一部分。

JSON扩展语法

MySQL 8.0增加了新的JSON函数,并提高了排序和分组JSON值的性能。

JSON路径表达式中的范围的扩展语法

MySQL 8.0扩展了JSON路径表达式中范围的语法。例如SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');结果[2, 3, 4]。

JSON表函数

MySQL 8.0增加了JSON表函数,可以使用JSON数据的SQL机制。JSON_TABLE()创建JSON数据的关系视图。它将JSON数据评估的结果映射到关系行和列。用户可以使用SQL查询函数返回的结果为常规关系表,例如join,project和aggregate。

JSON聚合函数

MySQL 8.0添加了聚合函数JSON_ARRAYAGG()来生成JSON数组并JSON_OBJECTAGG()生成JSON对象。这使得将多行中的JSON文档组合成JSON数组或JSON对象成为可能。

JSON合并函数

该JSON_MERGE_PATCH()函数实现RFC7396指定的JavaScript(和其他脚本语言)的语义,即它通过第二个文档的优先级去除重复项。例如,。JSON_MERGE('{"a":1,"b":2 }','{"a":3,"c":4 }');#returns {"a":3,"b":2,"c":4}
例如,该JSON_MERGE_PRESERVE()函数具有在MySQL 5.7中实现的JSON_MERGE()的语义,该语法保留所有值  JSON_MERGE('{"a": 1,"b":2}','{"a":3,"c":4}');# returns {"a":[1,3],"b":2,"c":4}.