Noms de bases, tables, index, colonnes et alias
<<<
Variables utilisateur Variables système
>>>

10 Structure du langage
 Manuel de Référence MySQL 4.1 : Version Française

Littéraux : comment écrire les chaînes et les nombres
Noms de bases, tables, index, colonnes et alias
->Variables utilisateur
Variables système
Syntaxe des commentaires
Cas des mots réservés MySQL

10.3 Variables utilisateur

MySQL supporte les variables utilisateur spécifiques à la connexion avec la syntaxe @variablename . Un nom de variable consiste de caractères alpha-numériques, basés sur le jeu de caractères courant, de '_' , '$' , et '.' . Le jeu de caractères par défaut est ISO-8859-1 Latin1. Cette valeur peut être changée en utilisant l'option --default-character-set de mysqld . Le jeu de caractères utilisé pour les données et le stockage .

Les variables n'ont pas besoin d'être initialisés. Elles sont à NULL par défaut et peuvent contenir un entier, un réel ou une chaîne. Toutes les variables d'un thread sont automatiquement libérées lorsque le thread se termine.

Vous pouvez déclarer une variable avec la syntaxe de SET :


SET @variable= { expression entier | expression réel | expression chaîne }
[,@variable= ...].
Vous pouvez aussi assigner une valeur à une variable avec d'autres commande que SET . Par contre, dans ce cas là, l'opérateur d'assignation est := au lieu de = , parce que = est réservé aux comparaisons dans les requêtes autres que SET :

mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
+----------------------+------+------+------+
|                    5 |    5 |    1 |    4 |
+----------------------+------+------+------+
Les variables utilisateur peuvent être utilisés là où les expressions sont allouées. Notez que cela n'inclut pas pour l'instant les contextes où un nombre est explicitement requis, comme ce qui est le cas avec la clause LIMIT dans une requête SELECT , ou la clause IGNORE nombre LINES dans une requête LOAD DATA . Note : dans une requête SELECT , chaque expression est n'évaluée que lors de l'envoi au client. Cela signifie que pour les clauses HAVING , GROUP BY , ou ORDER BY , vous ne pouvez vous référer à une expression qui implique des variables qui sont définies dans la partie SELECT . Par exemple, la requête suivante ne produira pas le résultat escompté :

mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM nom_de_table HAVING b=5;
La raison est que @aa ne contiendra pas la valeur de la ligne courante, mais celle de id pour la dernière ligne acceptée.La règle générale est de ne jamais assigner et utiliser la même variable dans la même commande.

Un autre problème avec l'affectation de variable et son utilisation dans la même commande est que le type de valeur par défaut est basé sur le type de la variable dans la commande de départ. Une variable non-assignée est supposée être de type NULL ou de type STRING . L'exemple suivant illustre bien ce cas de figure :


mysql> SET @a="test";
mysql> SELECT @a,(@a:=20) FROM table_name;
Dans ce cas, MySQL va indiquer au client que la colonne 1 est une chaîne, et il convertira tous les accès à la variable @a en chaîne, même si @a recevra finalement un nombre dans la seconde ligne. Après l'exécution de la commande, @a sera considéré comme un nombre.

Si vous avez des problèmes avec cela, essayer d'éviter d'affecter et d'utiliser la même variable dans la même commande, ou bien initialisez la variable avec les valeurs de 0, 0.0 ou "" avant de l'utiliser.

<< Variables utilisateur >>
Noms de bases, tables, index, colonnes et alias Structure du langage Variables système