Comment déclarer et utiliser des variables dans MySQL

Gustavo du Mortier 30 janvier 2023
  1. Variables définies par l’utilisateur dans MySQL
  2. Initialiser des variables définies par l’utilisateur
  3. Utiliser des variables comme champs dans une instruction SELECT
  4. Déclarer des variables locales dans MySQL
  5. Déclarer des variables système dans MySQL
Comment déclarer et utiliser des variables 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%'