最近,在一次关于 MySQL 8.0 新特性的演讲中,我注意到一位听众非常沮丧。我谈论一个特性越多,我就越能看到这个人变得激动。我们说的是沮丧到让我开始担心自己人身安全的程度。这个人终于爆发了:“如果我早知道那个,我就能节省四个月的生命!”
随着 MySQL 8.0 于 2018 年 4 月发布,新功能的发布周期改为每年四次。因此,MySQL 工程团队可以为我们的用户提供稳定的更新流,而不是等待两到三年才能获得新功能。部分原因是客户对 Web 上最流行的数据库的新功能的需求,部分原因是不断发展的软件工程流程。
但可悲的是,令我震惊的是,大多数人并没有坐在座位边缘等待 MySQL 产品公告。因此,我想向您介绍 MySQL 软件世界中最近新增的一些功能。
双密码
想象一下,公司安全部门提醒您更新“应用程序”上的密码(我们所说的应用程序是指需要编辑八百个独立的代码片段以删除旧密码并实施新密码)。即使是最热情的 Emacs 粉丝也会犹豫并拒绝一次性完成所有这些操作。救援来了!MySQL 8.0 支持双密码——一个当前密码和一个辅助密码——为您提供一种轻松过渡到新密码的方法。
ALTER USER 'appuser1' @ 'host1.example.com'
IDENTIFIED BY 'password_b'
RETAIN CURRENT PASSWORD;
现在您可以以较慢的节奏更改密码,并且当您完成所有代码更新后,只需删除旧密码即可。
ALTER USER 'appuser1' @ 'host1.example.com'
DISCARD OLD PASSWORD;
您还可以让 MySQL 服务器为您的帐户生成随机密码,并设置一个错误登录次数阈值,以便在达到阈值后自动锁定该帐户一段时间。
JSON 文档验证
修复数据库中存储的错误数据比一开始就阻止错误数据进入要困难得多。传统的关系数据库有一些方法可以确保您只将整数放入整数列中,并且有一些方法可以确保数据在指定的范围内。但是,随着对 MySQL 本地 JSON 数据类型的更多依赖,直到最近才有一种方法可以确保某些键/值存在、数据类型正确且在适当的范围内。感谢 JSON-Schema.org 的人员,MySQL 8.0 可以通过拒绝错误的 JSON 数据来帮助保持数据的清洁。
CREATE TABLE testx (
col JSON,
CONSTRAINT myage_inRange
CHECK (JSON_SCHEMA_VALID(’{“type”: “object”,
“properties”: {
“myage”: {
“type” : “number”,
“minimum”: 28,
“maximum”: 99
}
},“required”: [“myage”]
}’, col) = 1)
);
一个关于如何将错误数据排除在数据库之外的示例
mysql> insert into testx values(’{“myage”:27}’);
ERROR 3819 (HY000): Check constraint ‘myage_inRange’ is violated.
mysql> insert into testx values(’{“myage”:97}’);
Query OK, 1 row affected (0.02 sec)
是的,约束检查现在可以在 MySQL 8.0 中工作了,而在过去它们被忽略了。
更好的 SQL 支持
MySQL 8.0 添加了公用表表达式 (CTE)、窗口函数、横向派生表和对 TABLE 运算符的支持,为我们的用户提供了更强大、更健壮的结构化查询语言。
数据字典
最大的变化是在幕后的新数据字典。如果您曾经在以前的版本中使用 /var/lib/mysql 目录下漫游,并且对无数的小文件感到困惑,那么您就已经看到了实例的元数据。该元数据现在存储在数据字典中的数据库本身中。因此,除了释放 inode 之外,您现在还可以在一个模式中拥有数百万个表。缺点是,嗯,现在你可以在一个模式中拥有数百万个表了。
新的 shell
新的 MySQL shell,也称为 Mysqlsh,是一个新的 CLI,但具有强大的功能。它有三种模式——结构化查询语言、JavaScript 和 Python。因此,如果您的后两种语言中有库,则可以从 shell 中使用它们。此外,您可以保存脚本以供以后使用。
内置实用程序中包含一个并行批量加载器,可以非常快速地导入 CSV、TSV 和 JSON 数据。还有一个升级检查器,可以帮助您从 MySQL 5.7 更新到 8.0,它会指出与保留字和其他潜在问题的冲突。
作为额外的奖励,还有一个大大扩展的 help 命令和命令完成功能。
仅略微涉及更改的表面
这只是 MySQL 8.0 中众多更改中的一小部分。有关完整列表,请参加我于 2020 年 3 月 6 日在帕萨迪纳举行的南加州 Linux 展会 (SCaLE) 上的演讲。当天有一个完整的 MySQL 会议议程;请参阅我的博客文章了解详细信息。
评论已关闭。