web-dev-qa-db-fra.com

Comment déclarer une variable dans MySQL?

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;
282
cdub

Il existe principalement trois types de variables dans MySQL:

  1. 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 .

  2. 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.

  3. 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;
    
484
Omesh

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

20
bortunac

Utilisez set ou select

SET @counter := 100;
SELECT @variable_name := value;

exemple : 

SELECT @price := MAX(product.price)
FROM product 
10
KouchakYazdi

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.

2
AJS

Valeur SET

 declare Regione int;   
 set Regione=(select  id from users
 where id=1) ;
 select Regione ;
0
Hari Lakkakula

Différents types de variable:

  • Les variables locales (qui ne sont pas précédées de @) sont fortement typées et étendues au bloc de programme enregistré dans lequel elles sont déclarées. Notez que, comme indiqué dans la rubrique syntaxe DECLARE :

DECLARE est autorisé uniquement dans une instruction composée BEGIN ... END et doit être au début de celle-ci, avant toute autre instruction.

  • Les variables utilisateur (précédées du préfixe @) sont typées de manière vague et étendues à la session. Notez qu’ils n’ont ni besoin ni pu être déclarés - utilisez-les directement.

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;

0
mohammadAli

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;
0
Imran Javed