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_BY
从 sql_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