为啥不应该禁用 ONLY_FULL_GROUP_BY

Posted

技术标签:

【中文标题】为啥不应该禁用 ONLY_FULL_GROUP_BY【英文标题】:Why should not disable ONLY_FULL_GROUP_BY为什么不应该禁用 ONLY_FULL_GROUP_BY 【发布时间】:2021-02-25 16:09:08 【问题描述】:

在互联网搜索过程中,我看到很多关于禁用ONLY_FULL_GROUP_BY 功能的问题,因此这意味着很多开发人员在这种严格模式下编写 SQL 查询时遇到了麻烦。

我知道禁用此限制非常简单,但现在我问: 我为什么不应该这样做?

取消ONLY_FULL_GROUP_BY限制会带来什么问题或副作用?

【问题讨论】:

阅读手册:dev.mysql.com/doc/refman/5.7/en/group-by-handling.html 和 dev.mysql.com/doc/refman/5.7/en/…。简而言之,这似乎是为了避免在某些情况下产生歧义。 【参考方案1】:

如果没有ONLY_FULL_GROUP_BY 强制执行的严格性,您可以:

没有意识到您的查询有误; 得到一些没有特定含义的列; 您得到的结果可能不是 出现在不同的服务器上,或在下一次升级时,或当 查询计划更改(添加/删除/更新数据)。

所以听ONLY_FULL_GROUP_BY。它强烈警告您的查询不正确。错误只是说您的 GROUP BY 子句与返回的结果集不兼容。其他数据库默认强制执行,因此其用户编写的 SQL 更好。

忽略警告就像网络开发人员chmod a+rwx,因为他们无法计算文件权限。花点时间了解你工作的环境,你会获得更好的体验。下一个查看 SQL 的人(可能是您未来的自己)也会如此。

【讨论】:

以上是关于为啥不应该禁用 ONLY_FULL_GROUP_BY的主要内容,如果未能解决你的问题,请参考以下文章

为啥在卸载相关组件时保持“模态背景淡化显示”存在,我应该如何“删除/禁用”这个 div

为啥默认禁用 TypeScript 中的不安全/非严格编译器规则?

如果用户在 IOS 中禁用了后台应用刷新,为啥不发送推送通知?

为啥在禁用 webdav 后,在本地工作的 WebApi 的 DELETE 请求上出现 405 方法不允许错误?

HTML:为啥没有本地支持来限制复选框中的状态更改而不禁用它? [复制]

我应该使用 FxCop,为啥?