ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

mysql 专业笔记 -- 第 15 章:错误 1055:ONLY_FULL_GROUP_BY:... 不在 GROUP BY 子句中

mysql 专业笔记 -- 第 15 章:错误 1055:ONLY_FULL_GROUP_BY:... 不在 GROUP BY 子句中 最近,新版 MySQL 服务器开始为原本可以正常工作的查询生成 1055 错误。本章解释了这些错误的原因。MySQL 团队一直在努力弃用GROUP BY的非标准扩展,或至少让查询编写者更难被其“烧伤”。第 15.1 节:误用 GROUP BY 导致不可预测的结果:墨菲定律SELECTitem.item_id,uses.category,/* 非标准 */COUNT(*)number_of_usesFROMitemJOINusesONitem.item_id=uses.item_idGROUPBYitem.item_id;该查询将显示item表中的行,并显示uses表中相关行的计数。它还显示名为uses.category的列的值。在出现ONLY_FULL_GROUP_BY标志之前,此查询在 MySQL 中可以正常工作。它使用了 MySQL 对GROUP BY的非标准扩展。但该查询有一个问题:如果uses表中有多行匹配JOIN条件,MySQL 只返回其中一行的category列。哪一行?查询编写者和应用程序用户无法提前知道。形式上说,它是不可预测的:MySQL 可以返回任何它想要的值。“不可预测”类似于“随机”,但有一个显著的区别。人们可能期望随机选择会不时变化。因此,如果选择是随机的,你可能会在调试或测试期间发现它。不可预测的结果更糟糕:MySQL 每次查询都返回相同的结果,直到它不再返回相同的结果。有时是 MySQL 服务器的新版本导致了不同的结果。有时是表变大了导致了问题。可能出错的事情,终将出错,而且是在你最不期望的时候。这就是墨菲定律。MySQL 团队一直在努力使开发人员更难犯这个错误。5.7 序列中的较新版本有一个名为ONLY_FULL_GROUP_BY的sql_mode
返回列表