当前位置: 首页 > news >正文

记一次Mysql8.0使用GROUP BY查询导致异常问题

👩🏽‍💻个人主页:阿木木AEcru (更多精彩内容可进入主页观看)

🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》

💹每一次技术突破,都是对自我能力的挑战和超越。

目录

    • 前言
    • 一、错误信息
    • 二、异常出现的原因
    • 三、解决方法
      • 3.1 方式一:修改sql语句解决
      • 3.2 方式二:修改sql_mode配置
      • 3.3 方式三:修改MySQL配置文件
    • 四、结尾
    • 往期内容推荐

前言

看标题我相信大家都会有个疑惑,用个GROUP BY 查询怎么还会出问题?这不是很常见的一个查询语句吗?带着疑惑继续往下看吧。

一、错误信息

我们先来看看错误信息

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'toolkit.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

错误信息中有提到 sql_mode=only_full_group_by 这个模式。

二、异常出现的原因

查询当前数据库的sql_mode配置

select @@GLOBAL.sql_mode;

ONLY_FULL_GROUP_BY 模式在 MySQL 5.7 版本开始默认开启。这个模式的引入是为了更严格地遵守 SQL92 标准中的 GROUP BY 子句规则。在该模式下,如果查询中使用了 GROUP BY 子句,那么 SELECT 列表中的所有非聚合列都必须在 GROUP BY 子句中明确指定,或者使用聚合函数进行处理。如果在升级到 MySQL 5.7 或更高版本后遇到与 ONLY_FULL_GROUP_BY 相关的错误,可能需要修改 SQL 查询或调整 MySQL 的 sql_mode 配置来解决兼容性问题。

三、解决方法

3.1 方式一:修改sql语句解决

使用 ANY_VALUE() 函数运用用在 GROUP BY 子句中没有的字段。

这样在sql层面上就可以修复这个问题,当然这个也是临时解决而已,这种方式就不太推荐。

3.2 方式二:修改sql_mode配置

修改全局sql_mode

需要注意的是这个全局设置只对后续新建的数据库有效。

SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

修改已有数据库的sql_mode

SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

这种方式也会存在一个弊端,就是当数据库重启的时候,这个配置就失效了,需要重新执行来配置。

3.3 方式三:修改MySQL配置文件

推荐使用这种方式,可以一劳永逸,不过需要重启数据库

首先找到配置文件/etc/my.cnf或者/etc/mysql/my.cnf

找到配置文件中的[mysqld]配置,在下面添加上以下配置

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION


如上图所示

配置完成后重启mysql即可

sudo service mysql restart

重启完成后可以再次查询一次当前数据看sql_mode信息看下是否有生效。

select @@GLOBAL.sql_mode;

四、结尾

感谢观看至此,希望该文章能够帮助到您提升知识和技能。如果您喜欢我的内容,请不要忘记点赞和分享哦!👍

往期内容推荐

链接
Linux部署MySQL8.0—手把手保姆级教程
Docker部署MySQL主从详细教程
保姆级教程手把手教你如何快速部署一个属于你自己的微信AI机器人-支持群聊
还在用if校验参数?SpringBoot使用validation优雅实现参数校验
Docker三分钟部署ElasticSearch平替MeiliSearch轻量级搜索引擎
Java使用Hutool工具类轻松生成验证码

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 供应链安全:黑客攻击 Nimble 包
  • 【LeetCode】133.克隆图
  • C#中常用集合类型
  • 室内宠物空气净化器哪个好?排名靠前室内宠物空气净化器使用感受
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(3)--GTX的时钟架构
  • 白骑士的PyCharm教学高级篇 3.2 多模块项目管理
  • 谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景
  • 用Java构建简单ATM系统
  • 白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理
  • 基于深度学习的大规模模型训练
  • 无代码开发AI服务 - 利用向量库Kendra和Llama大模型在亚马逊云科技AWS上创建RAG知识库
  • 基于Qt的视频剪辑
  • informer中的WorkQueue机制的实现分析与源码解读(1)
  • Netty的几种IO模式的实现与切换
  • Flask基础教程(第一阶段)
  • (三)从jvm层面了解线程的启动和停止
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Leetcode】104. 二叉树的最大深度
  • C++11: atomic 头文件
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • exports和module.exports
  • golang中接口赋值与方法集
  • Hibernate最全面试题
  • JAVA并发编程--1.基础概念
  • Mybatis初体验
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记一次和乔布斯合作最难忘的经历
  • 解决iview多表头动态更改列元素发生的错误
  • 深度学习入门:10门免费线上课程推荐
  • 什么是Javascript函数节流?
  • 通过git安装npm私有模块
  • 微信支付JSAPI,实测!终极方案
  • 源码安装memcached和php memcache扩展
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 正则与JS中的正则
  • 阿里云服务器购买完整流程
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​iOS安全加固方法及实现
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (4)(4.6) Triducer
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (7)svelte 教程: Props(属性)
  • (动态规划)5. 最长回文子串 java解决
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (面试必看!)锁策略
  • (四)软件性能测试
  • (五)网络优化与超参数选择--九五小庞
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)nsfocus-绿盟科技笔试题目
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ./configure,make,make install的作用
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)