Maison > base de données > tutoriel mysql > Le comportement non standard de la clause GROUP BY de MySQL présente-t-il des risques pour les requêtes agrégées ?

Le comportement non standard de la clause GROUP BY de MySQL présente-t-il des risques pour les requêtes agrégées ?

Patricia Arquette
Libérer: 2024-12-09 06:33:05
original
599 Les gens l'ont consulté

Does MySQL's Non-Standard GROUP BY Clause Behavior Pose Risks for Aggregate Queries?

MySQL s'écarte-t-il de la norme en autorisant les colonnes non groupées dans SELECT ?

Introduction

Les utilisateurs de Microsoft SQL Server rencontrent un extrait de la documentation MySQL qui accorde à MySQL la possibilité de sélectionner des colonnes non groupées dans les requêtes agrégées. Cette pratique contredit la norme SQL, soulevant des questions sur sa légalité et ses implications.

Restriction SQL standard

La norme SQL-92 interdit de sélectionner des champs non agrégés qui ne relèvent pas de la norme SQL. la clause GROUP BY dans les requêtes agrégées. Ceci permet de garantir l'intégrité des données renvoyées et d'éviter des résultats ambigus.

Extension de MySQL

Cependant, depuis MySQL 5.5, il a étendu la clause GROUP BY pour permettre la sélection de colonnes non agrégées, même si elles ne dépendent pas fonctionnellement du regroupement colonnes.

Violation de la norme

Cette extension va à l'encontre de la norme SQL-2003, qui exige que les champs non agrégés soient fonctionnellement dépendants des colonnes de regroupement ou inclus dans une expression agrégée.

Pourquoi MySQL implémenté L'implémentation par MySQL de cette extension s'aligne sur l'intention de la norme SQL-2003 d'améliorer les performances en réduisant le tri et le regroupement inutiles des colonnes. Cependant, l'implémentation de MySQL s'écarte de la norme en autorisant toutes les colonnes, pas seulement celles qui sont fonctionnellement dépendantes.

Conséquences de l'extension

Cette extension comporte un potentiel d'erreurs indéterminées. résultats si les colonnes non agrégées n’ont pas de valeurs cohérentes au sein de chaque groupe. Les développeurs doivent faire preuve de prudence pour garantir la validité de leurs requêtes dans le cadre de ce mécanisme de regroupement assoupli.

Comportement de SQL Server

Contrairement à MySQL, SQL Server adhère strictement au SQL-92 standard, interdisant la sélection de champs non agrégés ne faisant pas partie du GROUP BY

Solution de contournement

Pour restreindre MySQL au comportement standard, définissez sql_mode sur "ONLY_FULL_GROUP_BY".

Nouvelles améliorations de MySQL

Dans MySQL 5.7, la gestion améliorée de GROUP BY reconnaît les fonctionnalités dépendances, mieux alignées sur la norme SQL-2003.

Conclusion

L'extension MySQL de la clause GROUP BY permet aux développeurs de sélectionner des colonnes non groupées dans des requêtes agrégées. Même si cet écart par rapport à la norme peut améliorer les performances, il introduit un risque de résultats indéterminés. Pour éviter de tels pièges, les développeurs doivent faire preuve de prudence avec les colonnes non agrégées et envisager le mode "ONLY_FULL_GROUP_BY" de MySQL pour un strict respect de la norme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal