Ordre d'évaluation SQL UPDATE
Dans une instruction SQL UPDATE, l'ordre d'évaluation détermine si les expressions suivantes reposent sur des valeurs modifiées. Cet article explore l'ordre d'évaluation dans la requête :
UPDATE tbl SET q = q + 1, p = q;
Ordre d'évaluation MySQL
Dans MySQL, l'ordre d'évaluation est "de gauche à droite". Cela signifie que l'expression « q 1 » est évaluée avant « q » dans l'affectation à « p ». Par conséquent, tbl.p sera défini sur la valeur de q avant d'être incrémenté.
Standard SQL
Selon les spécifications SQL92, "[Les expressions de valeur] sont effectivement évalués pour chaque ligne de T avant de mettre à jour une ligne de T." Cependant, cette déclaration n'est pas explicitement claire.
Implémentations et comportement
Malgré la norme, les implémentations varient dans leur ordre d'évaluation. Des tests ont montré que les bases de données suivantes définissent tbl.p sur q :
D'autre part, les bases de données suivantes définissent tbl.p sur q 1 :
Mise à jour du bug et de la documentation MySQL
MySQL avait auparavant défié le comportement de la majorité, mais un bug a été soulevé et la documentation a été mise à jour pour refléter explicitement l'ordre d'évaluation "de gauche à droite". Ce comportement est marqué comme une différence par rapport au SQL standard.
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!