MYSQL严格模式,如何使用?

时间:2018-08-28 05:59:13

标签: mysql mysql-workbench

在我学习过程中,我已经了解了这种严格的模式,建议我将其关闭,目前我已经关闭了。但是,如果存在严格模式,则肯定有原因。  首先让我展示出现错误的代码

SELECT `first_name`,
       `last_name`, 
       `order_date`, 
       `amount` 
 FROM `customers`
    JOIN `orders`
        ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`;

我得到了错误代码1055 error image

我被告知,除非汇总,否则我必须使用GROUP BY中的所有字段。

所以应该是这样。

SELECT `first_name`,
       `last_name`, 
       `order_date`, 
       `amount` 
 FROM `customers`
    JOIN `orders`
        ON `customers`.`id` = `orders`.`customer_id`
GROUP BY `orders`.`customer_id`,`order_date`, 'amount';

该代码可以“工作”,但可以按order_date和“金额”分组,我不想发生这种情况。

对于amount,我不得不使用SUM(),因此我不必再在GROUP BY上使用它,但是order_date仍然存在。

Since amount is still here它会显示所有日期选项,我确实知道每个id = id只能有一个日期

为了将来参考,我应该如何以良好的方式使用“严格模式”,还是应该将其关闭?

1 个答案:

答案 0 :(得分:1)

  1. 在MySQL中通常首选严格模式,因为它可以帮助您避免一些常见的错误,例如该错误。

  2. 当您选择GROUP BY子句中不包含的列且没有任何聚合时,没有严格模式的MySQL 可能会返回任何随机行,并且您不能对将返回哪一行。与其他许多RDBMS一样,严格模式下的MySQL 引发错误,因此您不得不修复查询。

  3. 要正确地编写查询,您首先需要确定要获取order_dateamount的哪些数据,例如它应该是客户或其他事物的最新订单。