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

你可能感兴趣的:(数据库)