6.1 Structure du langage
6 Référence du langage MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Literals: Comment écrire les chaînes et les nombres . Noms de bases, tables, index, colonnes et alias . Sensibilité à la casse pour les noms ->Variables utilisateur . Variables système . Syntaxe des commentaires . Est-ce que MySQL est sensible aux mots réservés ?
|
6.1.4 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.
|