MySQL 8 group by 报错 this is incompatible with sql_mode=only_full_group_by

文章目录

  • 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
  • 局部修改配置
  • windows修改配置
  • Linux修改配置

sql_mode配置

ONLY_FULL_GROUP_BY

  • 用于控制是否允许对查询结果进行分组,只允许完全分组,即分组字段必须在SELECT子句中出现。

STRICT_TRANS_TABLES

  • 此选项限制在事务中执行的SQL语句,确保在事务中执行的所有修改操作都符合数据库约束(如非空、唯一等)。
  • 如果启用此选项,则在执行插入、更新或删除操作时,如果遇到约束条件 violation,将引发错误,而不是忽略这些操作。

NO_ZERO_IN_DATE

  • 此选项禁止在日期列中使用零日期。
  • 如果启用此选项,则在插入或更新日期列时,如果提供的日期包含零值,将引发错误。

NO_ZERO_DATE

  • 此选项禁止在日期列中使用零日期。
  • 如果启用此选项,则在创建表时,如果日期列包含零日期,将引发错误。

ERROR_FOR_DIVISION_BY_ZERO

  • 此选项在执行除以零的操作时,引发错误,而不是返回无限值。
  • 如果启用此选项,则在执行除以零的操作时,将引发错误,而不是返回无限值。

NO_AUTO_CREATE_USER

  • 此选项禁用创建新用户时自动授权。
  • 如果启用此选项,则在创建新用户时,将不会自动授予任何权限。

NO_ENGINE_SUBSTITUTION

  • 此选项阻止在创建表时使用未指定的存储引擎。
  • 如果启用此选项,则在创建表时,如果未指定存储引擎,将引发错误。

局部修改配置

可以在命令窗口修改该配置,但此配置只维持该窗口。

select @@global.sql_mode;

在这里插入图片描述将ONLY_FULL_GROUP_BY去掉即可。

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

若是该配置不成功,则使用下方配置。

set @@global.sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

windows修改配置

在windows系统的mysql修改配置,需要找到自己mysql的安装目录,修改my.ini配置文件。
若有sql-mode配置,则将配置修改即可,若没有需要将此配置添加。

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

Linux修改配置

同window类似,需要找到mysql的安装目录,修改my.cnf配置文件。
若有sql-mode配置,则将配置修改即可,若没有需要将此配置添加。

[mysqld]
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

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