Comment déclarer une variable dans mysql, afin que ma deuxième requête puisse l'utiliser?
J'aimerais écrire quelque chose comme:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Il existe principalement trois types de variables dans MySQL:
Variables définies par l'utilisateur (préfixé par @
):
Vous pouvez accéder à toute variable définie par l'utilisateur sans la déclarer ni l'initialiser Si vous faites référence à une variable qui n'a pas été initialisée, elle a la valeur NULL
et un type de chaîne.
SELECT @var_any_var_name
Vous pouvez initialiser une variable à l'aide de l'instruction SET
ou SELECT
:
SET @start = 1, @finish = 10;
ou
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Une valeur peut être affectée aux variables utilisateur à partir d'un ensemble limité de données Types: nombre entier, décimal, virgule flottante, chaîne binaire ou non binaire, valeur .__ ou NULL.
Les variables définies par l'utilisateur sont spécifiques à la session. C'est-à-dire qu'une variable utilisateur définie par un client ne peut être vue ou utilisée par d'autres clients
Ils peuvent être utilisés dans les requêtes SELECT
à l’aide de Techniques avancées de variables utilisateur MySQL .
Variables locales (pas de préfixe):
Les variables locales doivent être déclarées en utilisant DECLARE
avant que Y accédant.
Ils peuvent être utilisés comme variables locales et comme paramètres d’entrée Dans une procédure stockée:
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
CALL sp_test(5);
Si la clause DEFAULT
est manquante, la valeur initiale est NULL
.
La portée d'une variable locale est le bloc BEGIN ... END
dans lequel elle est déclarée.
Variables système du serveur (préfixé par @@
):
Le serveur MySQL conserve de nombreuses variables système configurées avec une valeur par défaut . Elles peuvent être de type GLOBAL
, SESSION
ou BOTH
.
Les variables globales affectent le fonctionnement général du serveur tandis que les variables de session affectent son fonctionnement pour les connexions client individuelles.
Pour voir les valeurs actuelles utilisées par un serveur en cours d'exécution, utilisez l'instruction SHOW VARIABLES
ou SELECT @@var_name
.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
Ils peuvent être définis au démarrage du serveur à l'aide d'options de la ligne de commande ou d'un fichier d'options. La plupart d’entre eux peuvent être modifiés dynamiquement pendant l’exécution du serveur à l’aide de SET GLOBAL
ou SET SESSION
:
-- Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
-- Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;
ENSEMBLE
SET @var_name = value
OU
SET @var := value
les deux opérateurs = et: = sont acceptés
SÉLECTIONNER
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
si plusieurs jeux d'enregistrements trouvés, seule la dernière valeur de col2 est conservée (substitution);
SELECT col1, col2 INTO @var_name, col3 FROM .....
dans ce cas, le résultat de select ne contient pas de valeurs col2
Utilisez set ou select
SET @counter := 100;
SELECT @variable_name := value;
exemple :
SELECT @price := MAX(product.price)
FROM product
DECLARE nom_var [ nom_var] ... type [valeur DEFAULT] Cette instruction déclare les variables locales dans les programmes stockés.
Ex. DECLARE id INT non signé DEFAULT 1;
Pour fournir une valeur par défaut pour une variable, incluez une clause DEFAULT. La valeur peut être spécifiée sous forme d'expression. il n'est pas nécessaire que ce soit une constante. Si la clause DEFAULT est manquante, la valeur initiale est NULL.
Les variables locales sont traitées comme des paramètres de routine stockés en ce qui concerne le type de données et la vérification de débordement.
Les déclarations de variables doivent apparaître avant les déclarations de curseur ou de gestionnaire.
Les noms de variables locales ne sont pas sensibles à la casse. Les caractères et les règles de citation autorisés sont les mêmes que pour les autres identificateurs
La portée d'une variable locale est le bloc BEGIN ... END dans lequel elle est déclarée. Vous pouvez faire référence à la variable dans des blocs imbriqués dans le bloc de déclaration, à l'exception des blocs qui déclarent une variable du même nom.
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;
Différents types de variable:
DECLARE est autorisé uniquement dans une instruction composée BEGIN ... END et doit être au début de celle-ci, avant toute autre instruction.
Par conséquent, si vous définissez un programme stocké et souhaitez réellement une "variable locale", vous devrez supprimer le caractère @ et vous assurer que votre instruction DECLARE se trouve au début de votre bloc de programme. Sinon, pour utiliser une "variable utilisateur", supprimez l'instruction DECLARE.
De plus, vous devrez soit entourer votre requête entre parenthèses pour pouvoir l'exécuter en tant que sous-requête:
SET @countTotal = (SELECT COUNT (*) FROM nGrams);
Sinon, vous pouvez utiliser SELECT ... INTO:
SELECT COUNT (*) INTO @countTotal FROM nGrams;
Pour que toute personne utilisant @variable dans la fonction concat_ws obtienne des valeurs concaténées, n'oubliez pas de la réinitialiser avec une valeur vide. Sinon, il peut utiliser l'ancienne valeur pour la même session.
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;