MySQL5.7+group by报错only_full_group_by解决方案
今天和老师在做项目的时候写了一句SQL,在教室的数据库环境中MySQL5.1中并没有报错。
select ordernum,createtime,status from orderlist where isdelete = 0 and uid = {$uid} group by ordernum order by createtime desc
总所周知,MySQL数据库有一定的不严谨(指的是老版本)。所以针对这些老版本也确实出现了不少的非主流写法(在此是指别的数据库会报错的SQL)。
然而我本机的数据库环境是Mysql5.7的所以在运行的时候出现了报错,让我一脸懵逼。
后来发现是mysql 5.7以后的版本数据库的默认模式设置成了 only_full_group_by模式,而在执行的sql里有一些重复的行group by 的时候mysql 不知道选择哪一个行。
那么知道问题了我当时就想到了两种方式。
方法一:关闭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';
这样子就能关闭only_full_group_by模式
如果要还原则执行
set @@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';
方法二:优化SQL语句~
........我不会~我(暂时)是MySQL小白(只为完成查询任务,并不考虑最优解)。
周小雨》原创,转载请保留文章出处。
本文链接:https://zxyy.me/post-166.html
版权声明:若无特殊注明,本文为《正文到此结束
管理员已关闭本篇文章评论!