Maison >base de données >tutoriel mysql >L'ordre d'évaluation de l'instruction SQL UPDATE suit-il une norme et comment les différentes bases de données le gèrent-elles ?

L'ordre d'évaluation de l'instruction SQL UPDATE suit-il une norme et comment les différentes bases de données le gèrent-elles ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 05:05:12843parcourir

Does SQL UPDATE Statement Evaluation Order Follow a Standard, and How Do Different Databases Handle It?

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 :

  • Oracle XE (10g)
  • PostgreSQL 8.4.2
  • SQLite 3.3.6
  • SQL Serveur 2016

D'autre part, les bases de données suivantes définissent tbl.p sur q 1 :

  • Firebird 2.5
  • InterBase 2009
  • MySQL 5.0.77

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!

Déclaration:
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