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;
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!