Maison > Article > base de données > Quelles sont les variables de MySQL ? Comment l'utiliser ?
Ce que cet article vous apporte, c'est quelles sont les variables de MySQL ? Comment l'utiliser ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Les variables MySQL sont divisées en quatre types : les variables locales, les variables utilisateur, les variables de session et les variables globales. Les variables locales n'existent que dans les fonctions et les procédures stockées. Parmi elles, les variables de session et les variables globales sont collectivement appelées variables système dans MySQL.
Variables utilisateur
Basique
Comme leur nom l'indique, ce sont des variables définies par l'utilisateur. Comment définir des variables ? Il existe deux méthodes :
Méthode SET
# 两种方式都可以 SET @variable = expr SET @variable := expr
Méthode SELECT
# 必须 := SELECT @variable := expr
Notes de définition des variables utilisateur :
La valeur initiale d'une variable non définie est null
(peut être utilisée directement sans définir la variable sans signaler une erreur)
Les noms de variables ne sont pas sensibles à la casse
Les variables ne peuvent pas être utilisées lorsque des valeurs littérales sont requises, comme l'instruction select
dans limit
, etc.
L'ordre d'évaluation des expressions appelant des variables utilisateur n'est en fait pas défini, comme dans SELECT @a = 0, @a := @a + 1;
, les deux colonnes peuvent être 0 .
Lors de l'attribution d'une valeur à une variable utilisateur, la valeur de l'expression sera déterminée en premier. Comment comprendre, veuillez regarder le code suivant :
SET @m = 0; SET @m = 3, @n = @m; SELECT @n; # 0
Bien que le type de variables utilisateur puisse être modifié dynamiquement, cela n'est pas recommandé car votre vie peut être en danger lors de la remise sur le code. :p.
En tant que variables, elles ont toutes une portée. Les variables utilisateur sont valables pour toute la session, c'est-à-dire qu'elles sont valables pour toute la session. Cela semble bien, mais sachez que lorsqu'un pool de connexions est utilisé et que les variables utilisateur personnalisées ne sont pas initialisées correctement, des problèmes inattendus peuvent survenir. Comme il n’a pas été détruit, il enregistre quand même le dernier résultat.
Prenons un exemple simple pour implémenter une fonction de numéro de série. Le tableau et les données sont les suivants :
CREATE TABLE employee ( id int primary key, salary int not null ); INSERT INTO employee VALUES(1, 100); INSERT INTO employee VALUES(2, 200); INSERT INTO employee VALUES(3, 300);
Sur la base de ce que nous avons appris auparavant, on peut écrire rapidement le SQL suivant :
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r;
Pas de problème, tout se passe comme prévu, puis on ajoute une condition WHERE pour essayer :
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r WHERE @rowno = 0;
Théoriquement, cela ne devrait pas être le case Il renvoie des données, mais il renvoie toujours une donnée, qui est celle avec l'identifiant 1.
Pourquoi ? Le @rowno utilisé dans la condition WHERE a toujours la même valeur 0, et il ne répondra pas en temps réel car il est modifié dans SELECT. Pour implémenter la fonction de
WHERE, il faut la réécrire comme suit :
SELECT salary, rowno FROM ( SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r ) m WHERE rowno = 2;
En fait, les variables utilisateur dans WHERE, GROUP BY et ORDER BY de SELECT ne fonctionneront pas comme prévu, il utilise l'ancienne valeur, ne sera pas modifiée en temps réel.
Les variables de session sont des variables maintenues par le serveur pour chaque connexion client. Lorsque le client se connecte, les variables de session du client sont initialisées en utilisant les valeurs actuelles des variables globales correspondantes.
Comme son nom l'indique, la portée d'une variable de session est une Session. Comment définir une valeur pour une variable de session ? Comme suit :
set session var_name = value; set @@session.var_name = value; set var_name = value;
Notez que vous ne pouvez définir des valeurs que pour les variables de session existantes et que vous ne pouvez pas créer de nouvelles variables de session. Alors comment obtenir les variables de session ? Comme suit :
show session variables; # 以上代码会把所有会话变量罗列出来,可通过 like 进行过滤 show session variables LIKE "%var%";
Les variables globales affecteront le fonctionnement global du serveur. Mais au redémarrage, ces paramètres seront réinitialisés. Notez que pour modifier les variables globales, vous devez disposer de l'autorisation SUPER.
Ses paramètres sont similaires à ceux des variables de session :
set global var_name = value; set @@global.var_name = value;
Les variables globales ne peuvent pas ajouter de nouvelles variables, seules celles existantes peuvent être modifiées. L'opération d'obtention de variables globales est similaire aux variables de session :
show session variables; show global variables like "%var%";
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!