Maison > base de données > tutoriel mysql > Comment puis-je définir et utiliser en toute sécurité une variable dans une instruction SQL SELECT ?

Comment puis-je définir et utiliser en toute sécurité une variable dans une instruction SQL SELECT ?

Patricia Arquette
Libérer: 2024-12-02 03:56:12
original
320 Les gens l'ont consulté

How Can I Safely Define and Use a Variable Within a SQL SELECT Statement?

Définir et utiliser une variable dans une instruction Select

En SQL, il n'est généralement pas recommandé d'attribuer une valeur à une variable utilisateur et utilisez-le dans la même instruction select. La documentation de MySQL indique explicitement que l'ordre d'évaluation de ces expressions n'est pas défini et peut varier en fonction des éléments de la déclaration et des versions du serveur.

Pour illustrer ce point, considérons la requête suivante :

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;
Copier après la connexion

Dans cette requête, vous vous attendez à ce que la deuxième colonne renvoie la valeur de @z multipliée par deux. Cependant, MySQL peut renvoyer NULL, car l'ordre d'évaluation n'est pas garanti. Ce comportement diffère de l'utilisation d'une procédure stockée au lieu d'une variable utilisateur, comme indiqué ci-dessous :

SELECT 
    @z:=someProcedure(item),
    2*@z
FROM
    TableA;
Copier après la connexion

Dans ce cas, les résultats attendus sont obtenus car l'appel de procédure stockée est évalué avant l'affectation de la variable.

Pour résoudre ce problème et définir une variable dans une instruction select, vous pouvez utiliser une sous-requête :

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;
Copier après la connexion

Cette approche garantit que l'affectation de la variable se produit avant qu'elle ne soit utilisée dans la requête externe.

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