MySQL GROUP BY子句验证

5
假设我有一个包含以下内容的表格:
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> 

现在我运行了一个错误的SQL查询,使用了group by子句并且没有对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时未进行聚合操作,并对此发出错误或警告?

2个回答

8

1

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

设置SQL模式

  • 您可以通过使用--sql-mode="modes"选项启动mysqld或在my.cnf(Unix操作系统)或my.ini(Windows)中使用sql-mode="modes"来设置默认SQL模式。 modes是由逗号(“,”)字符分隔的不同模式列表。
  • 您可以通过使用SET [GLOBAL|SESSION] sql_mode='modes'语句来更改SQL模式运行时以设置sql_mode系统值。例如:
    SET sql_mode = 'ONLY_FULL_GROUP_BY'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接