mysql异常ERROR 1055 (42000)说明

具体异常信息如下:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'aaa.test.age' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

执行这样的SQL语句可重现异常 select age, name from test group by name

mysql5.1,不报异常

mysql5.5,不报异常

mysql5.6,不报异常

mysql5.7.22,报异常(具体从5.7哪个版本开始还没有确定下来,网上有人说5.7.5)

mysql从5.7的某个版本开始调整了默认参数sql_mode值为:

mysql> show variables like 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| 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 |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

其中ONLY_FULL_GROUP_BY就是影响了上面SQL语句是否报异常

解决方法:

1、改写SQL语句,毕竟上面的写法不是标准的SQL语句

2、登陆mysql服务器,执行以下命令,在global与session级都修改

mysql> 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';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

3、结合第2种方法,在my.cnf文件中,指定sql_mode的值:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注:2与3结合可不用重启服务器,且即使重启配置也依然有效。

原文地址:http://blog.51cto.com/10759919/2151174

时间: 2024-07-30 01:15:10

mysql异常ERROR 1055 (42000)说明的相关文章

docker拉取MySQL(percona)运行GROUP BY语句出现ERROR(1055):42000 如何解决。

1.先运行docker 2.列出所有的容器 #docker ps -a 3.运行MYSQL(percona) #docker start mysql 或者#docker startpercona 我本人用的是percona 4.进入容器 输入docker exec  -it a88bc043fcf2 /bin/bash 在输入ls就可以找到你要的文件了.接下来就是修改my.cnf配置文件 5.vi my.cnf 进入文件插入这条语句就可以了 原文地址:https://www.cnblogs.co

mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)

解决方法1:SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));这种修改只是暂时性的,还是在 my.ini 文件中的sql-mode直接修改比较好. 解决方法2:使用语句查询 sql_mode 的值再到 my.ini(windows)或my.cnf(linux)配置文件找到 sql-mode 中注释(去掉)only_full_group_by,加上刚才查询到的值. 原文地址:https://www.cnblogs.c

[故障解决]Mysql爆出ERROR 1044 (42000)的错误怎么办?

情况如图,使用dvlopenhls可以登陆到这个host,并且可以查看里面的tables,但是使用tables其中的op_flow就会报错,查看了很多地方,有人说要改密码,有人说要grant给权限.五花八门,乱七八糟. 其实这个问题很蛋疼,因为op_flow下面已经不是一个tables所以不能继续use.说白了这是一个语句错误,但是mysql竟然用access deny来反馈,的确是一个bug. 这样就好了. 不过如果是create表格出现了access deny,还是要检查一下grant权限的

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

在centos下安装好的mysql,用root帐号连上mysql,查看数据库结果只有information_schema库,我原来的库和mysql库都不见了,然后执行use mysql提示错误,如下: mysql> use mysql; ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 提示:ERROR 1044 (42000): Access denied for user ''@'loc

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql'(转)

解决ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 原创 2014年05月11日 11:42:25 # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # mysql -u root mysql mysql> UPDATE user SET Passwor

Mysql5.7版本ERROR 1055问题

Sql优化过程中遇到Sql执行错误: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘advanced.dept.deptno’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mo

ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user'

ERROR: Access denied for user 'root'@'localhost' (using password: NO)    发现:    mysql -u [email protected] -p 成功    mysql -u root -p 失败    mysql> SELECT user, host FROM mysql.user;    ERROR 1142 (42000): SELECT command denied to user ''@'localhost' f

Mysql,ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 刚在服务器上装上mysql,发现以root加密码的方式总是登录不了,而直接输入mysql则直接就可以登录了.或者以mysql –u root方式可以登录,但是实习上登录上去也是一个空用户(''@'localhost'),不是root用户,看不了其他数据库. 干货,删除空用户方法 1.关闭mysql service mysqld stop 或者

MySQL - ERROR 1235 (42000)

1.1.1 现象 导出一个MySQL数据库到一个文件,再导入的时候出现如下错误: ERROR 1235 (42000) at line 267: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table' 1.1.2 原因 导出的内容包含了触发器,所以在导入的时候就出现了这个错误. 1.1.3 解决 导出的时候增加--triggers