mysql查询only_full_group_by配置
时间: 2023-11-28 12:46:05 浏览: 32
在MySQL中,`only_full_group_by`是一个SQL_MODE,它要求在使用GROUP BY语句时,SELECT语句中的所有列都必须在GROUP BY子句中出现,或者在聚合函数中使用。如果没有这样做,MySQL将会抛出错误。下面是查询和修改`only_full_group_by`配置的方法:
1.查询当前的SQL_MODE配置:
```sql
SELECT @@sql_mode;
```
2.修改SQL_MODE配置,去掉`only_full_group_by`:
```sql
SET sql_mode=(SELECT REPLACE(@@sql_mode,'only_full_group_by',''));
```
3.修改SQL_MODE配置,添加`only_full_group_by`:
```sql
SET sql_mode=(SELECT CONCAT(@@sql_mode,',','only_full_group_by'));
```
注意:修改SQL_MODE配置可能会影响到数据库的其他功能,需要谨慎操作。
相关问题
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模式,以避免潜在的数据不一致或错误发生。
windows关闭MySQL的only_full_group_by
要关闭MySQL的only_full_group_by模式,请按照以下步骤进行操作:
1. 打开MySQL控制台或者使用MySQL客户端连接到MySQL服务器。
2. 运行以下命令来查看only_full_group_by的状态:
```
SELECT @@sql_mode;
```
3. 如果返回结果中包含了"ONLY_FULL_GROUP_BY",则只能使用完全相同的SELECT列表中的列进行分组,并且任何非聚合列必须在GROUP BY子句中列出。如果您想关闭only_full_group_by模式,请继续执行下一步。
4. 执行以下命令来修改MySQL的sql_mode参数:
```
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
这将从当前的sql_mode中删除ONLY_FULL_GROUP_BY选项,并将其设置为全局变量。如果您想在当前会话中关闭only_full_group_by模式,则可以执行以下命令:
```
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
5. 检查sql_mode参数是否已经修改。运行以下命令来查看新的sql_mode值:
```
SELECT @@sql_mode;
```
现在,only_full_group_by模式已经关闭了。如果您想重新启用它,请执行以下命令:
```
SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));
```
或者在当前会话中执行以下命令:
```
SET SESSION sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));
```