4

假设我有一个包含以下内容的表格:

mysql> select * from test;
+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  2 |    1 |
|  3 |    1 |
|  4 |    1 |
|  5 |    2 |
|  6 |    2 |
|  7 |    2 |
|  8 |    2 |
+----+------+
8 rows in set (0.00 sec)

mysql> 

现在我使用group by子句运行错误的 SQL 查询,并且在列上没有任何聚合id并得到错误的结果:

mysql> select id, val from test group by val;
+----+------+
| id | val  |
+----+------+
|  1 |    1 |
|  5 |    2 |
+----+------+
2 rows in set (0.00 sec)

mysql> 

mysql 客户端或其他工具能否验证此查询并在group by不聚合的情况下使用时发出错误或警告?

4

2 回答 2

7

是的,你可以这样做:

要禁用 MySQL GROUP BY 扩展,请启用ONLY_FULL_GROUP_BY SQL 模式。

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';

请参阅此处的文档。此外,关于服务器模块的这一部分可能会有所帮助。

于 2013-03-08T12:02:36.000 回答
1

默认情况下,SQL 模式ONLY_FULL_GROUP_BY设置为禁用。这就是为什么您的查询运行时没有抛出任何异常的原因。如果您不希望该行为启用该ONLY_FULL_GROUP_BY模式,

设置 SQL 模式

  • 您可以从 --sql-mode="modes" 选项开始设置默认 SQL 模式mysqld或者在(Unix 操作系统)或(Windows)中使用sql-mode="modes" 。模式是由逗号(“,”)字符分隔的不同模式的列表。my.cnfmy.ini
  • 您可以在运行时通过使用SET [GLOBAL|SESSION] sql_mode='modes'语句设置 sql_mode 系统值来更改 SQL 模式。前任:
    SET sql_mode = 'ONLY_FULL_GROUP_BY'
于 2013-03-08T12:03:07.013 回答