MySQL 5.7 中的更多改进,包括计算列

  • Jonathan Allen
  • 邵思华

2015 年 4 月 9 日

话题:MySQL语言 & 开发

让我们继续上一周的内容,讨论 MySQL 5.7 中的新特性,我们将把注意力集中于新的安全方面的特性。首先,新版本中取消了 mysql_old_password 这个认证插件。其实这个插件从版本 4.x 开始就已经被标注为过期了,但直到 5.7.5 版本中才被正式移除。从 5.7.6 开始,你必须显式地在 mysql.user 表中声明使用 mysql_native_password 方式进行认证。

新版本的 MySQL 开始支持密码过期策略了。如果系统管理员需要临时关闭某个用户或应用程序的访问权限,可以简单地将其帐号锁定即可。

和其它许多产品一样,MySQL 的发展趋势是提供“默认的安全性”。这就意味着如果你使用“mysqld –initialize”方式安装 MySQL,安装程序就会自动为管理员帐号创建一个随机的密码。该密码记录在错误日志中,并且在管理员首次登录时必须修改密码。使用这种安装选项不会生成任何匿名帐号,也不会创建测试数据库。

使用 GRANT 语句自动创建用户帐号的方式已经被标注为过期特性,同样,使用 GRANT 语言修改帐号属性,例如认证或 SSL 设置的方式也成为过期特性。

数据完整性

MySQL 的事务型存储引擎现在默认开启严格模式。虽然仍然可以通过 INSERT IGNORE 或 UPDATE IGNORE 等语句覆盖严格模式,但对于多数常见的访问来说,这种默认配置应该能够大大降低无记载数据损坏的发生次数。

此外,在 ALTER TABLE 语句中不再支持 IGNORE 语法了。

ERROR_FOR_DIVISION_BY_ZERO、NO_ZERO_DATE 和 NO_ZERO_IN_DATE 等 SQL 模式不再作为单独的配置存在,它们的功能已经集成在严格模式中了。

性能

对于所有的存储引擎来说,都可以对索引进行重命名,而不会产生表复制操作。

包含 GROUP BY 子句的语句将不会隐式地根据该子句的内容对数据进行排序了,对于那些依赖于隐式排序特性的应用程序来说,这个变更可能会造成某些问题。

特性

MySQL 现在支持计算列了,这一特性被称为“生成列”。语法本身有一点古怪的地方,因为它无法从表达式中推断出数据类型,不过它还是支持你所期待的各种特性,例如可以选择将计算值保存在表中,也可以选择在读取的时候进行计算。被保存的计算列能够添加索引。

HANDLER能够允许客户端对某张表或索引进行直接访问,现在这一特性可以在分区表中使用了。

查看英文原文:More Enhancements for MySQL 5.7 including Computed Columns

MySQL语言 & 开发