Mysql报错合集



mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

报错信息:

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

原因:

MySQL版本问题,有的版本默认开启了ONLY_FULL_GROUP_BY,所以导致了一些SQL无法正常执行,其实是因为group by 之后,返回的一些数据是不确定的,所以才会出现这个错误。

解决方法(两种):

  1. 使用聚合函数,例如:ANY_VALUE(column_name)

  2. 设置数据库,关闭ONLY_FULL_GROUP_BY。

    1
    2
    3
    4
    编辑my.cnf / my.ini 文件,找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY,重启MySQL服务;
    如my.cnf中没有sql-mode,需要加入以下:

    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服务,查询值,已经更改

1
select @@global.sql_mode

mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by

报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column

Error Code: 1093. You can’t specify target table ‘a’ for update in FROM clause

使用子查询的表进行update操作就报以上错误,因为mysql不支持where里面使用子查询

1
2
3
4
5
6
7
8
update student, 
-- 子查询出来的数据做为 b表
(SELECT s.Ssex,s.SId FROM `student` s, `sc` c
where s.SId = c.CId
and c.SId = '01') b
set student.Ssex = '女'
-- 然后利用b的sid = 学生表的sid找到符合b表的所有数据
where student.SId = b.SId

1064错误,delete语句中 表名不能用别名

1
DELETE FROM tableName  t where t......;

报1064 错误,原因MySQL 中delete 语句不能给表名起别名
另外。如果记录不存在,delete from 不会报错!

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  1. © 2020 Liu Yang    湘ICP备20003709号

请我喝杯咖啡吧~

支付宝
微信