Maison > base de données > tutoriel mysql > MISE À JOUR SQL : « p = q » reflète-t-il la valeur « q » originale ou mise à jour ?

MISE À JOUR SQL : « p = q » reflète-t-il la valeur « q » originale ou mise à jour ?

Barbara Streisand
Libérer: 2024-12-26 21:32:10
original
937 Les gens l'ont consulté

SQL UPDATE: Does `p = q` Reflect the Original or Updated `q` Value?

Ordre d'évaluation SQL UPDATE

Dans une instruction SQL UPDATE, l'ordre dans lequel les expressions sont évaluées peut avoir un impact significatif sur le résultat. Examinons la requête suivante :

UPDATE tbl SET q = q + 1, p = q;
Copier après la connexion

Ici, la question se pose : "tbl"."p" sera-t-il défini sur q ou q 1 ? L'ordre d'évaluation est-il régi par une norme SQL ?

Les implémentations varient

Malgré le manque de clarté de la norme SQL, différentes implémentations de bases de données gèrent l'ordre d'évaluation différemment. Les tests ont révélé différents comportements entre Firebird, InterBase, MySQL, Oracle, PostgreSQL, SQLite et SQL Server. Dans la plupart des cas, la valeur de « p » est définie sur q 1, indiquant une évaluation de gauche à droite.

Interprétation standard

Cependant, une interprétation de les spécifications SQL92 suggèrent que la norme prévoit que les expressions doivent être évaluées avant la mise à jour des lignes. Cela entraînerait la définition de "p" sur q.

L'approche unique de MySQL

MySQL se distingue comme la seule base de données testée qui "voit" les nouvelles valeurs pendant évaluation. Ce comportement diffère de la majorité des autres implémentations et peut entraîner des résultats inattendus.

Conclusion

Bien que la norme SQL manque de directives explicites sur l'ordre d'évaluation, il est généralement supposé que les expressions doivent être évaluées avant que les mises à jour soient appliquées. Cependant, les implémentations varient et les développeurs doivent être conscients des divergences potentielles. Dans les cas où l'ordre d'évaluation est critique, il est recommandé d'utiliser des variables intermédiaires pour définir explicitement l'ordre des opérations souhaité.

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