MySQL8.0新特性( 二 )

2.降序索引(descending index)MySQL8.0开始真正支持降序索引,只有InnoDB引擎支持降序所以,且必须是BTREE降序索引,MySQL8.0不在对group by操作进行隐式排序 。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中的函数索引的效果 。三、通用表表达式
1.非递归 CTE派生表:select * from (select 1) as dt;通用表表达式:with cte as (select 1) select * from cte;with cte1(id) as (select 1),cte2 as (select id+1 from cte1) select * from cte1 join cte2;2.递归 CTE四、窗口函数
五、InnoDB增强
1.集成数据字段2.原子ddl操作MySQL5.7执行drop命令 drop table t1,t2; 如果t1存在,t2不存在,会提示t2表不存在,但是t1表仍然会被删除 。MySQL8.0执行同样的drop命令,会提示t2表不存在,而且t1表不会被删除,保证了原子性 。ddl操作(针对表)的原子性前提是该表使用的存储引擎是InnoDB3.自增列持久化解决了之前的版本,主键重复的问题 。MySQL5.7及其以前的版本,MySQL服务器重启,会重新扫描表的主键最大值,如果之前已经删除过id=100的数据,但是表中当前记录的最大值如果是99,那么经过扫描,下一条记录的id是100,而不是101 。MySQL8.0则是每次在变化的时候,都会将自增计数器的最大值写入redo log,同时在每次检查点将其写入引擎私有的系统表 。则不会出现自增主键重复的问题 。4.死锁检查控制5.锁定语句选项六、JSON增强
1.内联路径操作符column->>path等价于之前的:JSON_UNQUOTE(column -> path)JSON_UNQUOTE(JSON_EXTRACT(column,path))2.JSON聚合函数MySQL8.0和MySQL5.7.22增加了2个聚合函数1)JSON_ARRAYAGG(),将多行数据组合成json数组

MySQL8.0新特性

文章插图
 
示例:select o_id,json_arrayagg(attribute) as attributes from t group by o_id;
MySQL8.0新特性

文章插图
 
2)JSON_OBJECTAGG(),用于生成json对象示例:select o_id json_objectagg(attribute,value) as attributes from t group by o_id;
MySQL8.0新特性

文章插图
 
注意:json的聚合函数针对重复key,会使用最后的覆盖前面已有的值,如果下面的o_id=3,它的color有2个值,一个green,一个yellow,使用生成json的聚合函数的时候,前面的green会被覆盖掉 。
MySQL8.0新特性

文章插图
 

MySQL8.0新特性

文章插图
 
3.JSON实用函数1)JSON_PRETTY() 输出json数据的时候,格式化 。select json_object('id',3,'name','Barney');
MySQL8.0新特性

文章插图
 
select json_pretty(json_object('id',3,'name','Barney'));
MySQL8.0新特性

文章插图
 
2)JSON_STORAGE_SIZE() json数据所占用的存储空间(单位:字节)3)JSON_STORAGE_FREE() json数据更新后所释放的空间(单位:字节)4.JSON合并函数MySQL8.0废弃了JSON_MERGE()函数,推荐使用以下两个函数合并JSON数据1)JSON_MERGE_PATCH()2)JSON_MERGE_PRESERV()上面两个函数都是JSON数据合并,最大的区别就是前者遇到相同key的时候会用后面的覆盖前面的,后者会都保留,看下面的截图:
MySQL8.0新特性

文章插图
 
5.JSON表函数MySQL8.0新增了JSON_TABLE()函数,将JSON数据转换成关系表,可以将该函数的返回结果当做一个普通的临时表进行sql查询
【MySQL8.0新特性】


推荐阅读