MySQL如何设置only_full_group_by的值
时间: 2023-10-14 09:17:34 浏览: 149
MySQL中,设置`only_full_group_by`的值有两种方法:
1. 临时设置
在MySQL中使用以下命令可以临时设置`only_full_group_by`的值:
```
SET sql_mode='ONLY_FULL_GROUP_BY';
```
这个命令将会在当前会话中设置`only_full_group_by`的值为开启状态。
2. 永久设置
如果希望在MySQL中永久地设置`only_full_group_by`的值,可以按照以下步骤进行:
1. 编辑MySQL的配置文件my.cnf或者my.ini(Windows平台)。
2. 在[mysqld]节下添加以下行:
```
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY
```
3. 保存并关闭文件。
4. 重启MySQL服务器生效。
这样,MySQL服务器就会永久地启用`only_full_group_by`模式。
相关问题
mysql 禁用 ONLY_FULL_GROUP_BY,暂时解决错误(sql_mode=only_full_group_by)
在 MySQL 中,ONLY_FULL_GROUP_BY 是一种 SQL mode,它要求在 GROUP BY 子句中使用的字段必须在 SELECT 子句中出现,或者是聚合函数(如 COUNT、SUM 等)的参数。
如果你的 MySQL 服务器启用了 ONLY_FULL_GROUP_BY 模式,那么当你尝试执行一个违反这个规则的查询时,就会出现错误,提示 "Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column"。
如果你确定你的查询逻辑不需要满足 ONLY_FULL_GROUP_BY 模式的要求,可以通过修改 sql_mode 参数来禁用这个模式。具体方法如下:
1. 使用 root 用户登录 MySQL 服务器。
2. 执行以下命令查看当前 sql_mode 参数的值:
```sql
SELECT @@sql_mode;
```
3. 复制查询结果中的值,备份一下原来的 sql_mode 参数值,以便需要时可以恢复。
4. 执行以下命令修改 sql_mode 参数,删除其中的 ONLY_FULL_GROUP_BY:
```sql
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
```
注意:上面的命令中,只保留了 STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO 和 NO_ENGINE_SUBSTITUTION 这些参数,将 ONLY_FULL_GROUP_BY 参数删除了。
5. 再次执行以下命令查看当前 sql_mode 参数的值,确认是否已经成功移除了 ONLY_FULL_GROUP_BY:
```sql
SELECT @@sql_mode;
```
如果查询结果中已经不包含 ONLY_FULL_GROUP_BY 参数,那么说明修改成功。
注意:禁用 ONLY_FULL_GROUP_BY 模式可能会导致某些查询结果不正确,因此应该在确保没有影响到业务逻辑的情况下才进行修改。
mysql8 only_full_group_by 移除
在MySQL 5.7之前的版本中,MySQL默认启用了`ONLY_FULL_GROUP_BY`模式,它要求在使用GROUP BY语句时,必须将SELECT列表中的所有非聚合列都包含在GROUP BY列表中。然而,在MySQL 5.7及之后的版本中,MySQL引入了一个新的SQL模式:`NO_AUTO_GROUP_BY`,它允许在GROUP BY语句中省略非聚合列。
如果你想在MySQL 8中移除`ONLY_FULL_GROUP_BY`模式,可以使用以下方法之一:
1. 修改MySQL配置文件:找到并编辑MySQL的配置文件(通常是`my.cnf`或`my.ini`),在`[mysqld]`部分添加如下行:
```
sql_mode = "NO_ENGINE_SUBSTITUTION"
```
然后重新启动MySQL服务。
2. 在会话级别临时修改SQL模式:在你的查询之前执行以下命令来更改当前会话的SQL模式:
```
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
```
这将禁用`ONLY_FULL_GROUP_BY`模式,直到当前会话结束或重置为默认值。
无论你选择哪种方法,都应该注意只移除`ONLY_FULL_GROUP_BY`模式而不影响其他SQL模式,以避免潜在的数据不一致或错误发生。
阅读全文