zoukankan      html  css  js  c++  java
  • MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

    MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:

    Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column '×××' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行

    解决方案一:

    这时我们可以通过navicat或workbench输入select @@global.sql_mode来查看当前数据库的sql_mode属性值

    复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题

    set sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

    但是这种方式设置的只是当前会话中的sql_model,服务器重启后,设置可能会失效。设置永久生效模式可参考博客:https://www.cnblogs.com/zenghui940/p/4361941.html

    解决方案二:

    MySQL有any_value(field)函数,他主要的作用就是抑制ONLY_FULL_GROUP_BY值被拒绝

    官方有介绍,地址:https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_any-value

    我们可以把select语句中查询的属性(除聚合函数所需的参数外),全部放入any_value(field)函数中;

    例如:select name,any_value(sex) from test_table group by name

    这样sql语句不管是在ONLY_FULL_GROUP_BY模式关闭状态还是在开启模式都可以正常执行,不被mysql拒绝。

    本人小白,如果表述的难以理解可查看博客:http://www.ywnds.com/?p=8184

    原文地址:https://blog.csdn.net/Peacock__/article/details/78923479
  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/jpfss/p/11130877.html
Copyright © 2011-2022 走看看