远眺未来:我们介绍了数据库的过去、现在,这一章就是展望未来。
一、MySQL 8.0有什么新特性
1.1 MySQL 8.0版本
MySQL 5.6版本、5.7版本,怎么突然到了8.0版本?没听说过6.0、7.0版本呢?
6.0、7.0版本,压根就没有。因为这里的8.0版本,其实就是MySQL 5.8的意思,只不过换了个名字。因为小版本迭代,显得太low
比如:
有些手机产品,刚诞生就是3.0。其实,1.0、2.0都没有。文字游戏。
1.2 新特性1:窗口函数(Window Functions)
1.sql语句
2.Navicat客户端,执行sql语句
这是连接了MySQL 8.0数据库的可视化客户端,用户界面友好
改造,方便理解:(分解)
意思:把数据表payment中所有数据筛选出来,再额外加上一个字段ranking
字段ranking,是数据表payment中的字段吗?
不是。
- 用rank()函数,计算出来的这一列,就是字段ranking。
- 按照支付金额,进行排序(降序);
- 不是全部排名,而是针对顾客个人的支付金额;
3.执行结果:
先按照customer_id字段,把整个表切分成若干窗口;
然后在每一个顾客内部进行排序。
本质:“每一个顾客内部”,就是一个窗口
上述的rank()函数,就是窗口函数。
窗口函数,不只是rank()函数,还有别的:
1.3 隐藏索引
常用于索引测试,判断索引加上的前后,效果对比:
使能/失能
英文是enable/disable,意思应该是“打开/关闭”某个功能。
直接翻译成“打开/关闭”不好吗,翻译的这么晦涩
1.4 降序索引
1.
在MySQL8.0之前,索引都只能升序排序。
升序索引:单向链表。只能从小往大遍历,不能反过来。
比如:
全班成绩排名,一定是按照总分从大往小排。升序索引,根部无法用。
2.
1.5 通用表表达式CTE
不是结巴。本质思想:封装。
- 在sql语句内部,创建了一个小的临时视图(临时表)
- 小括号内部,是一个中间结果,或叫子查询
如果,就子查询就是几十行,整个sql语句好几百行呢?
优点:清爽、可读性好。
1.6 UTF-8编码
以前,是utf8字符集;
现在,utf8mb4字符集才是完整的实现UTF-8编码的字符集。
建表时,不用手动再指定utf8mb4字符集了。
1.7 DDL事务
1.
DDL:对数据结构、元数据的操作。比如,加个字段、加个索引
DML:对数据的操作。比如,对数据的增删改查。------ 以前,都是数据的事务。
2.
DDL事务:
就是在库里创建数据表,建了一张表,后悔了,rollback回滚。以前,无法实现。
现在,8.0可以。-------------------- PostgreSQL(单体之王):我早就实现了,你才补上?
1.8 InnoDB Cluster
存储引擎InnoDB ,能组集群?
组复制。有三个数据库,是平级平等的,没有主从关系。
强一致性协议:其中某一个提交时,必须得到其他两个的同意才行。
以前,不是master-slave吗?
现在,流行叫leader-follower。
1.9 Percona XtraDB Cluster
Percona ,就是那个做XtraBack的公司
组复制。有三个数据库,是平级平等的,没有主从关系。
强一致性协议:其中某一个提交时,必须得到其他两个的同意才行。要写,就一块写。
有点像Zookeeper的强一致性协议。
优点:任何时刻,三个节点的状态都是一样的。强一致性。
不足:流程麻烦。















Comments | NOTHING