Comment déclarer et utiliser des variables dans MySQL
- Variables définies par l’utilisateur dans MySQL
- Initialiser des variables définies par l’utilisateur
-
Utiliser des variables comme champs dans une instruction
SELECT
- Déclarer des variables locales dans MySQL
- Déclarer des variables système dans MySQL
Dans cet article du tutoriel, nous expliquerons comment déclarer des variables dans le code SQL des bases de données MySQL.
Dans les scripts SQL, vous pouvez utiliser des variables pour stocker des valeurs pendant l’exécution d’une séquence de commandes et les utiliser à la place des littéraux.
Variables définies par l’utilisateur dans MySQL
MySQL reconnaît différents types de variables. Le premier type est celui des variables définies par l’utilisateur, identifiées par un symbole “@” utilisé comme préfixe. Dans MySQL, vous pouvez accéder aux variables définies par l’utilisateur sans les déclarer ou les initialiser au préalable. Si vous le faites, une valeur NULLE est attribuée à la variable lors de son initialisation. Par exemple, si vous utilisez SELECT
avec une variable sans lui donner de valeur, comme dans ce cas :
SELECT @SomeVariable;
MySQL retourne une valeur NULL.
Initialiser des variables définies par l’utilisateur
Pour initialiser une variable définie par l’utilisateur, vous devez utiliser une instruction SET
ou SELECT
. Vous pouvez initialiser plusieurs variables à la fois, en séparant chaque instruction d’affectation par une virgule, comme ceci :
SET @FirstVar=1, @SecondVar=2;
Une fois que vous avez assigné une valeur à une variable, elle aura un type en fonction de la valeur donnée. Dans les exemples précédents, @FirstVar
et @SecondVar
sont de type int
.
La durée de vie d’une variable définie par l’utilisateur dure aussi longtemps que la session est active, et elle est invisible pour les autres sessions. Une fois que la session se ferme, la variable disparaît.
Il existe 5 types de données que vous pouvez attribuer à une variable définie par l’utilisateur :
- chaîne de caractères (binaire ou non binaire)
- entier
- décimale
- en virgule float
NULL
, qui peut être associé à n’importe quel type.
Pour attribuer une valeur à une variable, vous pouvez utiliser le symbole =
ou :=
. Les deux énoncés suivants ont le même effet :
SET @MyIntVar = 1;
SET @MyIntVar := 1;
Utiliser des variables comme champs dans une instruction SELECT
Les variables peuvent faire partie des listes de champs d’une déclaration SELECT
. Vous pouvez mélanger les variables et les noms de champs lorsque vous spécifiez des champs dans une sélection, comme dans cet exemple :
SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;
Déclarer des variables locales dans MySQL
Les variables locales n’ont pas besoin du préfixe @
dans leur nom, mais elles doivent être déclarées avant de pouvoir être utilisées. Pour déclarer une variable locale, vous pouvez utiliser l’instruction DECLARE
ou l’utiliser comme paramètre dans une déclaration STORED PROCEDURE
.
Lorsque vous déclarez une variable locale, une valeur par défaut peut lui être attribuée en option. Si vous n’attribuez aucune valeur par défaut, la variable est initialisée avec une valeur NULLE.
Chaque variable vit dans un champ d’application, délimité par le bloc BEGIN ... END
qui contient sa déclaration.
L’exemple suivant illustre deux façons différentes d’utiliser les variables locales : comme paramètre de procédure et comme variable interne à la procédure :
DELIMITER $$
CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
DECLARE factor DECIMAL(5, 2);
SET factor:=3.45;
SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$
DELIMITER ;
Dans l’exemple précédent, la variable itemcount
est utilisée comme un paramètre pour passer une valeur à la procédure. Cette variable est ensuite utilisée dans l’instruction SELECT
pour multiplier le champ ListPrice
obtenu à partir de la table. La variable locale factor
est utilisée pour stocker une valeur décimale utilisée pour multiplier le prix résultant.
Déclarer des variables système dans MySQL
Il existe un troisième type de variables appelées variables système utilisées pour stocker des valeurs qui affectent les connexions individuelles des clients (variables SESSION
) ou affectent le fonctionnement du serveur dans son ensemble (variables GLOBAL
).
Les variables système sont généralement définies au démarrage du serveur. Pour ce faire, vous pouvez utiliser la ligne de commande ou inclure l’instruction SET
dans un fichier d’options. Mais leurs valeurs peuvent être modifiées dans un script SQL.
Les variables système peuvent être identifiées en utilisant un double signe @
comme préfixe ou en utilisant les mots GLOBAL
ou SESSION
dans l’instruction SET
. Une autre façon de différencier les variables système GLOBAL
et SESSION
est d’utiliser un second préfixe : global
ou session
. Voici quelques exemples de la façon dont vous pouvez attribuer des valeurs aux variables système :
-- Alternative ways to set session system variables:
SET interactive_timeout=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;
-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;
Pour voir les variables système utilisées dans une session ou dans le serveur, vous pouvez utiliser l’instruction SHOW VARIABLES
. Vous pouvez ajouter un opérateur de comparaison pour filtrer cette liste si vous voulez obtenir la valeur de certaines variables spécifiques. Par exemple :
SHOW VARIABLES LIKE '%timeout%'