mysql-1055错误 MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

mysql-1055错误

MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

想着给数据库里插入一条测试数据,居然报错了可奇葩的是报错了数据居然还插入进去了。

看了一下原来是因为mysql版本的问题。。

在MySQL5.7之后,sql_mode中默认有一条ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。

而这行 ONLY_FULL_GROUP_BY 的意思是:如果在SELECT时后面所查询出的列,没有在GROUP BY中出现,那么这个SQL是不合法的。

举个例子:一张表 有 ID ,name ,type这三个字段

SELECT name,type  FROM table_name  GROUP BY  type    //这条语句会报错,应为name没有出现在GROUP BY后

SELECT * FROM table_name GROUP BY `name`;//这条语句也会报错,因为*中包含主键id,而group by后的表达式中并没有包含id和type

也许会有人问那为啥插入数据也会报这个错误呢,那是因为数据库在insert、update、delete这三种语句执行之前也会执行查询操作。但不会影响insert、update、delete这三种语句的执行,所以才会出现报错了还有数据的情况

解决办法就是吧 ONLY_FULL_GROUP_BYsql_mode中去掉

linux中解决:

  • 首先先查出sql_mode的值,在找到my.cnf这个文件所在位置,vim 修改my.cnf这个文件
select @@sql_mode 
mysql --help | grep my.cnf 
vim /etc/my.cnf 
  • 将sql_mode的值修改为 刚刚查询出来的值(去掉ONLY_FULL_GROUP_BY
//像这样
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
  • 然后重启mysql

windows中同样解决:

  • 首先先查出sql_mode的值
select @@sql_mode 
  • 其次找到mysql的配置文件 my.ini 将刚刚查询出来的值放到[mysqld]

在这里插入图片描述

  • 然后重启mysql
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值