一、问题

本人使用的MySql版本是8.0的

当MySql5.7及以上的版本执行带有 ORDER BY 的SQL语句时可能会报错。

例如,执行以下mysql语句:

SELECT id, user_id, title FROM m_article WHERE user_id>=100 AND user_id <=200 GROUP BY user_id;

SQL报错信息如下:

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

二、分析原因

SQL-92及更早版本的查询不允许使用select列表、HAVING条件或ORDER BY列表引用未在GROUP BY子句中命名的非聚合列。

简单来说:由于sql-mode的参数配置了ONLY_FULL_GROUP_BY,这时 select 的字段不在 group by 中,并且 select 的字段未使用聚合函数(SUM,MAX,MIN等)的话,那么这条SQL查询是被 MySql 认为非法。

MySql官方文档:https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

三、解决方法

1、不修改 sql-mode 的参数情况下

1.1、以本文中的例句修改,在原来的 ORDER BY 后面多加一个主键。

1.2、以本文中的例句修改,使用ANY_VALUE()函数,把非 GROUP BY 列中的字段和没有使用聚合函数的都加上。使用ANY_VALUE()不检查函数结果是否为ONLY_FULL_GROUP_BY SQL模式。

MySql官方文档:https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_any-value

2、修改 sql-mode 的参数

2.2、使用SQL语句临时修改。

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

2.3、修改 MySql 的配置文件,这种方式配置完成后都要重启MySql。

2.3.1、Linux 中找到 MySql 配置文件,文件名一般叫【my.cnf】,文件路径一般在:/etc/my.cnf,/etc/mysql/my.cnf。打开【my.cnf】文件后,就在  [mysqld] 下面追加一行即可。

sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2.3.2、Windows 中找到【my.ini】文件,打开后在  [mysqld] 下面追加一行即可。

sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

MySql5.7及以上 ORDER BY 报错问题的更多相关文章

  1. sql语句Order by 报错列名不明确

    select top 10 column1,column2,column3 from table1 where table1.id not in(select top 0 table1.id from ...

  2. 在LXC Centos6-moban 编译安装mysql-5.6.36 时候遇见的报错

    在LXC安装Centos6-moban   编译安装mysql-5.6.36 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 -DMY ...

  3. mysql5.5碰到的type= MyISAM报错问题

    最近把mysql升级到5.5版本,发现type= MyISAM报错,网上查了一下原来MYSQL5.5.x 版本 不支持 TYPE=MyISAM  这样的语句了!!! MYSQL语句写法 TYPE=My ...

  4. Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错

    近期在开发过程中,因为项目开发环境连接的mysql数据库是阿里云的数据库,而阿里云的数据库版本是5.6的.而测试环境的mysql是自己安装的5.7.因此在开发过程中有小伙伴不注意写了有关group b ...

  5. MySQL5.7.26安装及启动报错解决

    一.安装依赖包 [root@db01 ~]# yum install -y lrzsz [文件上传/下载] [root@db01 ~]# yum -y install xfsprogs [安装磁盘格式 ...

  6. 解决MySQL5.5MySQLInstanceConfig最后一步setting报错

    问题描述 在安装过MySQL(或已卸载)的电脑中重新安装MySQL5.5, 在安装最后一项中Processing configuration中最后一项配置失败: 问题解决: 首先关于卸载: 安装时候若 ...

  7. MySQL5.7本地首次登录win10报错修改

    1.打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件.(Win10默认安装,my.ini在C:\ProgramData\MySQL\M ...

  8. MySQL主从复制故障1595报错【原创】

    服务器环境 架构图 架构搭成后,在B机器上发现主从报错Last_IO_Errno: 1595 Last_IO_Error: Relay log write failure: could not que ...

  9. mysql 安装报错集合

    mysql-5.6.39 源码编译安装报错 报错信息: /tmp/ccV858jD.s: Assembler messages: /tmp/ccV858jD.s: Fatal error: can't ...

  10. Mysql报错:Authentication .....Reading from the stream has failed

    连接Mysql5.7版本的数据库出现报错:Authentication to host '171.13.164.***' for user 'root' using method 'mysql_nat ...

随机推荐

  1. 什么是snapshot isolation

    数据库常见的4种事务隔离级别: (源自:(34条消息) 8. 事务隔离级别: 总结_oyw5201314ck的博客-CSDN博客_ck事务隔离) 大多数的数据库默认的事务隔离级别是Repeatable ...

  2. mybatis-plus系统化学习之更新-AR-主键-service

    1.背景 本节要么很简单,要么不重要,知道就可以了. 2.更新 package com.ldp.demo01; import com.baomidou.mybatisplus.core.conditi ...

  3. Apache SeaTunnel 2.3.3 版本发布,CDC 支持 Schema Evolution!

    时隔两个月, Apache SeaTunnel 终于迎来大版本更新.此次发布的 2.3.3 版本在功能和性能上均有较大优化改进,其中大家期待已久的 CDC Schema evolution(DDL 变 ...

  4. 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)

    2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛) RC-u1 热҈热҈热҈ #include<bits/stdc++.h> using namespace std; us ...

  5. Structures, unions, enumerations, and bitfields in ARM C and C++

    Structures, unions, enumerations, and bitfields in ARM C and C++ Non-Confidential   ARM DUI0375E ARM ...

  6. Adobe Photoshop cc2022 Mac中文破解版下载 支持intel/M1/M2/M3

    Adobe Photoshop cc2022 Mac版,支持intel.M1.M2.M3芯片,全系都能使用,最低系统需求:11.0以上.建议安装此版本或者ps2024版本. 下载地址放到最后,先来看安 ...

  7. Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?

    在上一篇,我们学会了redis集群的扩容.从3主3从扩容到4主4从. 那么,接着,活动过去了.流量没有那么大了.需要缩容了.从4主4从缩容到3主3从了.那么这个时候又该怎么处理呢? PS本系列:< ...

  8. spm 一阶分析的Microtime onset应该如何填写?

    1. 如果对数据进行了slice timing, 那么在进行一阶分析时应该修改microtime onset和 microtime resolution这两个参数, 假设数据的slice order= ...

  9. 深度学习学习率(Learning Rate)lr理解

    现在是2024年4月23日13:54,在看代码了,嗯,不能逃避,逃避可耻,会痛苦,看不懂多看几遍多写一下就好了,不能逃避了哈,一点一点来就是了,我还有救. 如何理解深度学习中的学习率(Learning ...

  10. 理解IO多路复用

    I/O 多路复用是什么? I/O 多路复用是用户程序通过复用一个线程来服务多个 I/O 事件的机制,我们也可以将他说成是一个线程服务多个文件描述符 fd,而 I/O 多路复用是在操作系统层面实现提供的 ...