Maison >base de données >tutoriel mysql >Quels types de variables possèdent les procédures stockées MySQL ?
Types de variables de procédures stockées MySQL : 1. Variables locales, la syntaxe de définition est "DECLARE nom de variable type de données" ; 2. Variables utilisateur, la syntaxe de définition est "set @variable name:=..." ; variables, il peut être divisé en variable globale "@@global" et variable de session "@@session".
L'environnement d'exploitation de ce tutoriel : système windows10, version mysql8.0.22, ordinateur Dell G3.
Variables courantes dans les procédures stockées MySQL : variables locales, variables utilisateur, variables système
Dans le corps du processus, vous pouvez déclarer des variables locales pour une utilisation temporaire Enregistrez certaines valeurs.
1. Définissez la syntaxe des variables locales :
DECLARE var_name[, var_name] ... type [DEFAULT value];
Parmi eux, le type est le type de données MySQL, tel que : int, float, date, varchar(length)
Remarque :
①DECLARE est utilisé pour déclarer des variables locales, et DECLARE n'est utilisé que par Utilisé dans les instructions composées BEGIN ... END et doit se trouver au début de l'instruction composée, avant que toute autre instruction puisse être utilisée dans des blocs imbriqués, à l'exception de celles qui déclarent des variables portant le même nom.
② Si vous souhaitez fournir une valeur par défaut pour une variable, utilisez la clause DEFAULT (la valeur peut être une constante ou spécifiée sous forme d'expression) ; s'il n'y a pas de clause DEFAULT, la valeur initiale est NULL.
2. Format de base :
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) BEGIN DECLARE var_name1 type [DEFAULT value]; DECLARE var_name2 type [DEFAULT value]; DECLARE……; [characteristic ...];
Exemple 1 : Créez un processus, spécifiez une valeur par défaut pour les variables locales et appelez le processus
mysql>delimiter $$ mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$ mysql>delimiter ; mysql>call test1(@num); mysql> select@num;+------+ | @num | +------+ | 100 | +------+
Analyse :
Créez une procédure stockée test1 : la sortie est la valeur de la variable num1 , déclarez que la variable locale Num2 est de type int et que la valeur par défaut est 100. Utilisez set pour attribuer la valeur de num2 (si elle n'est pas traitée, la valeur par défaut) à num1
Appelez test1 : utilisez la variable utilisateur num pour recevoir le valeur de sortie num1 de la procédure stockée...
Default En plus des littéraux, les valeurs peuvent également être des expressions complexes, y compris des sous-requêtes scalaires
Exemple 2 : Processus de création, utilisant le nombre de tous les joueurs pour initialiser une variable
mysql>delimiter $$ mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ; mysql>call test2(@num);mysql> select@num;+------+ | @num | +------+ | 14 | +------+
Remarque : MySQL ne prend pas en charge les tableaux en tant que variables locales.
3. La portée des variables locales :
C'est-à-dire la portée du bloc de programme où la variable peut être utilisée normalement sans erreur.
Dans le cas de blocs imbriqués,
les variables déclarées dans le bloc externe peuvent être utilisées directement dans le bloc interne ;
les variables déclarées dans le bloc interne ne peuvent être utilisées que dans le bloc interne ;
Analyse : La variable v2 ne peut être utilisée que dans le bloc interne b2. L'instruction set et la dernière instruction set du bloc b3 sont fausses.
> Les variables déclarées dans cette connexion ne peuvent pas être utilisées dans une autre connexion utilisée.
> Un symbole @ représente une variable utilisateur.
1. Définition des variables utilisateur (set, select) :
1) L'instruction set attribue des valeurs aux variables utilisateur :
Vous pouvez utiliser "=" ou ":=" comme allocateur
expr attribué ; à chaque variable Il peut s'agir d'un entier, d'un nombre réel, d'une chaîne ou d'une valeur NULL ;
mysql> set @zjc:=999; mysql> select@zjc;+------+ | @zjc | +------+ | 999 | +------+
2) L'instruction select attribue des valeurs aux variables utilisateur :
Le caractère d'allocation doit être ":=" au lieu de " =", car = est pris en compte dans les instructions non-SET. C'est un opérateur de comparaison ;
mysql> select @abc:=123;+-----------+ | @abc:=123 | +-----------+ | 123 | +-----------+mysql> select@abc;+------+ | @abc | +------+ | 123 | +------+
Remarque :
① Les variables utilisateur peuvent être définies et utilisées n'importe où ; elles peuvent être utilisées directement si elles ne sont pas définies (la valeur par défaut est null) .
②Le format du nom de variable des variables utilisateur : @var_name, avec le symbole @.
③L'abus des variables utilisateur rendra le programme difficile à comprendre et à gérer.
Affectation de variable étendue : définir la syntaxe
Les variables dans MySQL ne limitent pas strictement les types de données. Le type de données d'une variable change à tout moment en fonction de la valeur attribuée à la variable.
SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr
## est utilisé pour attribuer des valeurs aux variables utilisateur, aux variables système, et peut également attribuer des valeurs aux variables locales dans le processus.
Remarque : lorsque
définissez des variables système, il n'y a pas de modification de portée et la valeur par défaut fait référence à la portée de la session ;
(Remarque spéciale, certaines variables système n'ont pas de modification de portée et ne peuvent pas être définies, il est donc préférable de apportez-les avec les variables système définies par la portée).
2. Portée des variables utilisateur
Tant que les variables utilisateur définies dans la connexion actuelle sont utilisées dans la connexion actuelle, c'est OK, mais rien d'autre.
3. Différence avec les variables locales :
Les variables locales n'ont que des noms de variables et pas de symbole @ ; les noms de variables utilisateur ont un symbole @ devant eux.
Ils sont tous définis d'abord puis utilisés ; pour les variables non définies, la valeur de sélection est vide.
Les variables locales ne sont utilisées qu'à l'intérieur de la procédure stockée et n'ont aucune signification en dehors du processus. Lorsque le bloc début-fin est traité, les variables locales disparaissent tandis que les variables utilisateur peuvent être utilisées à l'intérieur et à l'extérieur de la procédure stockée.
Conseils : dans la procédure stockée, utilisez des variables locales, n'utilisez pas de variables utilisateur.
1. Les variables utilisateur sont comme mentionné ci-dessus @var_name (un symbole @)
①Les variables utilisateur sont liées à la connexion à la base de données. .Une fois la connexion déconnectée, disparaît automatiquement ;
②Sélectionnez une variable utilisateur sans affectation et renvoyez NULL, ce qui signifie qu'il n'y a pas de valeur ;
Les variables MySQL sont similaires aux langages dynamiques. La valeur de la variable change en fonction du type de valeur à attribuer.
2. Variables système : selon la portée des variables système, elles sont divisées en : variables globales et variables de session (deux symboles @)
①Variables globales (@@global.)
Lorsque MySQL démarre, le serveur change automatiquement les variables globales Les variables sont initialisées aux valeurs par défaut ;
Les valeurs par défaut des variables globales peuvent être modifiées en modifiant le fichier de configuration MySQL (my.ini, my.cnf).
②Variables de session (@@session.)
Chaque fois qu'une nouvelle connexion est établie, elle est initialisée par MySQL ;
MYSQL copiera les valeurs de toutes les variables globales actuelles en tant que variables de session (c'est également pour par exemple, si les valeurs des variables de session et des variables globales ne sont pas modifiées manuellement après l'établissement de la session, les valeurs de toutes ces variables seront les mêmes).
#La différence entre les variables globales et les variables de session : Les modifications des variables globales affecteront l'ensemble du serveur, mais les modifications des variables de session n'affecteront que la session en cours.
Apprentissage recommandé : Tutoriel vidéo mysql
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!