MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr

问题描述

更新MySql表中的一行数据时遇到这样一个报错:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY
clause and contains nonaggregated column
‘information_schema.PROFILING.SEQ’ which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by

截图:
报错截图

解决方法

网上搜索了有很多类似的解决方案,但本人使用后都没有解决。
如:https://blog.csdn.net/u012187452/article/details/82120345/ 、https://blog.csdn.net/baidu_36882394/article/details/105736059等。
这些文章的方案思路是对的,只是没有给出完整的解决过程。接下来我来补充下完整详细的方法。如果帮到了你,请一键三连支持下我的文章!

问题原因及基本思路

该问题的原因是 sql_mode不兼容,因此基本思路是修改本机所安装mysql的sql_mode,也就是把报错中 sql_mode=only_full_group_by去掉 only_full_group_by这种mode即可。

解决步骤

1. 找到自己Mysql的安装位置

如果你知道自己的Mysql安装位置那么直接到文件夹打开即可。
mysql安装位置
如果不知道,可通过下面方式查询:
在mysql查询软件中执行sql语句如下图
查询mysql位置
上述执行mysql语句的软件是传统的mysql配套查询工具:Navicat Premium
Navicat软件
如果你还没有且想要的话,可关注并私信我获取。

2. 修改 my.ini 配置文件

用记事本打开my.ini文件,在 [mysqld] 下面添加sql_mode的配置语句:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

注意:

  • 这行sql_mode配置一定要在 [mysqld] 下方,而不是 [mysql] 或 [client]下方,否则无效!

  • 这行配置的内容因人而异,上述只是我本机的配置。可能我的配置应用到你电脑上也可以解决问题,但也可能遇到无法重启mysql服务的情况。我就是复制了上述其他文章中的配置出现了该情况。
    那么,如何获取适合自己电脑的sql_mode配置呢?你需要先查询自己的sql_mode,然后去除only_full_group_by即可。如下图:
    查询本机sql_mode
    查询结果显示,当前我电脑的sql_mode是:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    因此,在此基础上去掉 ONLY_FULL_GROUP_BY
    结果是:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    这就是正确的sql_mode配置的由来!

附上我完整的my.ini供你参考吧:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:/MySQL/mysql-8.0.28-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:/MySQL/mysql-8.0.28-winx64/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

3. 重启MySql服务以生效配置

很多文章到上面修改完配置就结束了,也不讲修改完还需要怎么做才生效,导致新手因修改完配置后还是无法解决问题而苦恼。还以为是自己配置修改的不对呢!其实只需要最后重启mysql服务,让服务重新读取my.ini配置就好了。

那么如何重启mysql服务呢?有很多方式,有的mysql配套软件里就有个按钮一键重启。当然了你需要下载那种软件,太麻烦了。这里分享一种最朴素的也是最适用的方法吧。

高端的食材往往只需要用最简单的烹饪手法。

执行mysql命令:关闭mysql服务,再启动mysql服务

以管理员的方式打开命令提示符。

啥?命令提示符也找不到在哪?

没办法,看下图吧,谁让咱是保姆级教学呢?
命令提示符
切记这里以管理员身份运行,否则可能会遇到无权限的问题。

运行后,弹出我们熟悉的黑框窗口,在里面执行命令:

关闭当前mysql服务:

net stop mysql

启动mysql服务:

net start mysql

如此,便是一次重启mysql的过程。
重启mysql


验证问题解决

再次执行之前的mysql语句,会发现,问题解决了!

问题解决了

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个错误提示意味着在ORDER BY子句中,第一个表达式不在GROUP BY子句中,而且包含一个非聚合列。此外,这个非聚合的列不依赖于GROUP BY子句中的任何列。需要修改查询语句,正确使用GROUP BY子句。 ### 回答2: [err] 1055 - expressionMySQL数据库出现的错误提示,主要是针对SQL查询语句中的语法错误导致的,这种错误可能会导致查询结果的异常甚至查询失败。 在MySQL中,如果执行SQL语句时出现[err] 1055 - expression错误提示,通常是因为SQL语句中存在语法错误,导致MySQL无法正确处理该查询语句。这种错误可能会影响到SQL查询结果的正确性和准确性。 针对这种错误,我们可以采取以下一些解决措施: 首先,检查SQL查询语句的完整性和正确性,确保SQL语法是正确的,没有拼写错误、语法错误等问题。如果有错误,及时进行修改和调整。 其次,可以通过MySQL日志查看更详细的错误信息,了解具体的错误原因和出现位置,从而更快地定位和解决问题。 另外,还可以通过重新连接MySQL等方式尝试解决问题。在重新连接时,系统会对数据库进行一些清理和优化,有可能会消除一些隐性的错误。 总之,对于[err] 1055 - expression错误,我们应该及时找到具体原因,采取有效的解决措施,以避免影响到SQL查询结果的正确性和准确性。此外,为了避免出现这种错误,我们在编写SQL语句时,需要认真检查验证程序,确保正确性和完整性,避免简单的语法错误。 ### 回答3: [#1055 - Expression] 的意思是出现了一个错误,通常是因为 SQL 语句中有语法错误或者是表或字段不存在等原因。以下是一些可能导致此错误的情况: 1. SQL 语句中存在语法错误,比如拼写错误、缺少引号、缺少括号等。这些错误可能会使数据库引擎无法识别您的 SQL 语句,从而出现错误。 2. 在 SQL 语句中使用的表或字段不存在。这可能是因为您的表名或字段名有误,或者您的表或字段已被删除或重命名。 3. 在 SQL 语句中使用的数据类型不正确。如果您在查询中使用了错误的数据类型或参数类型,那么也会导致表达式错误。例如,在查询日期数据时使用了错误的日期格式。 如果您遇到了这个错误,可以尝试以下几个方法来解决问题: 1. 仔细检查 SQL 语句,确保没有拼写错误或语法错误。您可以使用 SQL 编辑器或在线 SQL 格式化工具来编辑和格式化 SQL 代码。 2. 确认您要查询的表或字段存在,并且没有被删除或重命名。您可以在数据库中检查表和字段的信息,或者直接执行 SELECT * FROM tablename LIMIT 1 来查询表中的一条记录,以确认表是否存在。 3. 确认您在查询中使用了正确的数据类型和参数类型。例如,在查询日期数据时,应该使用正确的日期格式。 如果您无法解决这个错误,请考虑咨询数据库管理员或专业技术支持人员,他们可以帮助您找到并解决问题。同时,在编写 SQL 语句时,应该遵循一些最佳实践,例如使用参数化查询、避免使用保留字作为表名或字段名等,以避免出现常见的 SQL 错误
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值