mysql sql mode_mysql sql_mode

mysql sql mode_mysql sql_modeMySQL异常sql_mode=only_full_group_by 原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mode=only_fu

MySQL提示sql_mode=only_full_group_by解决办法

 

MySQL异常sql_mode=only_full_group_by

原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。
会报sql_mode=only_full_group_by错误说明写的SQL语句不严谨,
对于group by聚合操作,select中的列只能是出现在group by中的列,使用聚合函数除外,如max()、min()等

如以下例子会报错:

select id, no, uid from user_order group by uid;

 

改成下面的SQL则不报错:

select uid from user_order group by uid;

 

解决这个问题可以有三个方法:

方法一:
使用 group_concat() 或 any_value()
group_concat():将分到同一组的数据默认用逗号隔开作为返回数据
any_value():将分到同一组的数据里第一条数据的指定列值作为返回数据

修改后语句如下:

select GROUP_CONCAT(id), GROUP_CONCAT(no), uid from user_order group by uid;
select any_value(id), any_value(no), uid from user_order group by uid;

 

方法二:
如果语句太多,变动太大,可以改数据库配置

首先查看当前sql_mode

select @@global.sql_mode;

 

可以看到返回以下值:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 

重新设置,去掉ONLY_FULL_GROUP_BY即可:

SET GLOBAL sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

 

当然,如果想去掉所有限制也是可以的:

SET GLOBAL sql_mode="";

 

这个方法的好处是不用重启MySQL生效(需要注意的是在当前会话实例中是不生效的),坏处是重启后会恢复原样。

方法三:
永久生效,修改配置文件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"

 

保存,重启后生效。

 

原文地址:https://www.cnblogs.com/woods1815/archive/2022/09/11/16684345.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4783.html

(0)
上一篇 2023-06-05 10:30
下一篇 2023-06-05

相关推荐

  • MongoDB介绍与安装(Windows版)「建议收藏」

    MongoDB介绍与安装(Windows版)「建议收藏」1. MongoDB介绍 MongoDb是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB指在为web应用提供可…

    2023-02-28
    152
  • Python实现列表框(listbox)

    Python实现列表框(listbox)listbox是tkinter库中提供的一种常见的用户界面控件,它可以用来显示一个列表,并且支持用户通过点击列表中的项来选择其中的一个或多个项。在Python的GUI编程中,listbox通常用来向用户展示一些可供选择的选项,或者是展示一些用户已经做出的选择。

    2024-03-28
    65
  • mapping测试_分布式测试优点

    mapping测试_分布式测试优点作者:叶奔, 殷成文 不久前我们开源了基于 Kubernetes 的混沌测试工具 Chaos Mesh®,Chaos Mesh 提供了模拟系统异常状况的能力,但这只是混沌工程中的一环,完整混沌工程核…

    2023-03-17
    128
  • 企业级大数据服务_企业级大数据平台

    企业级大数据服务_企业级大数据平台第10章 企业级调优 10.1 执行计划(Explain) 1)基本语法 EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query 2)案例实操 (1

    2023-05-21
    146
  • Python中的NoneType:无法传递信息的空对象类型

    Python中的NoneType:无法传递信息的空对象类型NoneType是Python中的一种数据类型,它是表示空值的一种类型。它通常用于表示没有值或未定义的值。

    2024-04-03
    89
  • sql数据库日志如何查看_redis查看慢日志

    sql数据库日志如何查看_redis查看慢日志MySQL的通用日志: 用来记录对数据库的通用操作,包括错误的sql语句等信息。 通用日志可以保存在:file(默认值)或 table(mysql.general_log表) mysql通用日志的设置

    2023-06-06
    151
  • Python日期相减实现

    Python日期相减实现在Python中,我们使用datetime模块来处理日期时间。而在实际开发中,常常需要对日期进行各种操作,比如计算日期间隔、调整日期等。其中,日期相减是最常见的场景之一。本文就将介绍如何使用Python的datetime模块实现日期相减操作,便于我们在日常开发中对日期进行计算。

    2024-08-28
    22
  • mysql中sql优化_SQL的优化

    mysql中sql优化_SQL的优化配置慢查询日志 set global slow_query_log = [ON|OFF] set global slow_query_log_file = /sql_log/slowlog.log …

    2022-12-15
    152

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注