Vous pouvez accéder à n'importe quelle 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 une valeur NULLet un type de chaîne.
SELECT@var_any_var_name
Vous pouvez initialiser une variable à l'aide de SETou de l' SELECTinstruction:
SET@start=1,@finish =10;
ou
SELECT@start:=1,@finish :=10;SELECT*FROM places WHERE place BETWEEN@startAND@finish;
Les variables utilisateur peuvent se voir attribuer une valeur à partir d'un ensemble limité de types de données: entier, décimal, virgule flottante, chaîne binaire ou non binaire ou valeur NULL.
Les variables définies par l'utilisateur sont spécifiques à la session. En d'autres termes, une variable utilisateur définie par un client ne peut pas être vue ou utilisée par d'autres clients.
Le serveur MySQL conserve de nombreuses variables système configurées sur une valeur par défaut. Ils peuvent être de type GLOBAL, SESSIONou BOTH.
Les variables globales affectent le fonctionnement global 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' SHOW VARIABLESinstruction 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 des options de la ligne de commande ou dans un fichier d'options. La plupart d'entre eux peuvent être modifiés dynamiquement pendant que le serveur fonctionne à l'aide de SET GLOBALou 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;
L' =opératrice n'a pas fonctionné pour moi. Cela a bien fonctionné lorsque j'ai utilisé l' :=opérateur.
divinedragon
24
=L'opérateur ne fonctionne que dans la SETclause. Pour attribuer une valeur à une variable dans la SELECTrequête, vous pouvez utiliser l' :=opérateur par exempleSELECT @start := 1
Omesh
2
Pouvez-vous préciser ce que cela signifie: "Pas besoin de déclarer les variables de session définies par l'utilisateur désignées par le préfixe @"?
billynoah
3
@billynoah Je suppose que cela signifie que les variables de session définies par l'utilisateur (qui commencent par @) n'ont pas besoin d'une déclaration explicite; vous pouvez simplement les affecter immédiatement comme s'ils avaient déjà été déclarés.
jobo3208
2
Et vous pouvez attribuer une variable avec le résultat d'une instruction select comme celle-ci: SET @subscriptionId = (select subscriptionId from User where emailAddress='[email protected] ');
Software Prophets
28
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 dans col2 est keep (override);
SELECT col1, col2 INTO@var_name, col3 FROM.....
dans ce cas, le résultat de select ne contient pas de valeurs col2
Ex les deux méthodes utilisées
- TRIGGER_BEFORE_INSERT --- définition d'une valeur de colonne à partir des calculs
...SELECT count(*)INTO@NR FROM a_table WHERE a_condition;SET NEW.ord_col = IFNULL(@NR,0)+1;...
Je suppose que pour mysql SELECT, la syntaxe est nécessaire pour séparer le sens de = (comparaison) de: = (asign)
bortunac
1
Dans certains cas, les valeurs laissées dans les variables peuvent NE PAS correspondre à la dernière ligne retournée. Par exemple, SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10semble évaluer les affectations de variables avant que la commande ne soit effectuée, de sorte que la valeur renvoyée de @var ne puisse même pas être liée à l'une des lignes renvoyées. Cependant, les documents ne disent pas dans quelles conditions cela peut se produire.
les variables locales (qui ne sont pas préfixées par @) sont fortement typées et étendues au bloc de programme stocké dans lequel elles sont déclarées. Notez que, comme documenté sous DECLARE Syntax :
DECLARE n'est autorisé qu'à l'intérieur d'une instruction composée BEGIN ... END et doit être à son début, avant toute autre instruction.
Les variables utilisateur (préfixées par @) sont typées de manière lâche et étendues à la session. Notez qu'ils n'ont pas besoin ni ne peuvent ê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 afin de l'exécuter en tant que sous-requête:
Pour toute personne utilisant @variable dans la fonction concat_ws pour obtenir 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.
Réponses:
Il existe principalement trois types de variables dans MySQL:
Variables définies par l'utilisateur (préfixées par
@
):Vous pouvez accéder à n'importe quelle 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 une valeur
NULL
et un type de chaîne.Vous pouvez initialiser une variable à l'aide de
SET
ou de l'SELECT
instruction:ou
Les variables utilisateur peuvent se voir attribuer une valeur à partir d'un ensemble limité de types de données: entier, décimal, virgule flottante, chaîne binaire ou non binaire ou valeur NULL.
Les variables définies par l'utilisateur sont spécifiques à la session. En d'autres termes, une variable utilisateur définie par un client ne peut pas être vue ou utilisée par d'autres clients.
Ils peuvent être utilisés dans des
SELECT
requêtes utilisant des techniques avancées de variable utilisateur MySQL .Variables locales (sans préfixe):
Les variables locales doivent être déclarées en utilisant
DECLARE
avant d'y accéder.Ils peuvent être utilisés comme variables locales et paramètres d'entrée dans une procédure stockée:
Si la
DEFAULT
clause est manquante, la valeur initiale estNULL
.La portée d'une variable locale est le
BEGIN ... END
bloc dans lequel elle est déclarée.Variables système du serveur (préfixées par
@@
):Le serveur MySQL conserve de nombreuses variables système configurées sur une valeur par défaut. Ils peuvent être de type
GLOBAL
,SESSION
ouBOTH
.Les variables globales affectent le fonctionnement global 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'
SHOW VARIABLES
instruction ouSELECT @@var_name
.Ils peuvent être définis au démarrage du serveur à l'aide des options de la ligne de commande ou dans un fichier d'options. La plupart d'entre eux peuvent être modifiés dynamiquement pendant que le serveur fonctionne à l'aide de
SET GLOBAL
ouSET SESSION
:la source
=
opératrice n'a pas fonctionné pour moi. Cela a bien fonctionné lorsque j'ai utilisé l':=
opérateur.=
L'opérateur ne fonctionne que dans laSET
clause. Pour attribuer une valeur à une variable dans laSELECT
requête, vous pouvez utiliser l':=
opérateur par exempleSELECT @start := 1
OU
les deux opérateurs = et : = sont acceptés
si plusieurs jeux d'enregistrements trouvés, seule la dernière valeur dans col2 est keep (override);
dans ce cas, le résultat de select ne contient pas de valeurs col2
Ex les deux méthodes utilisées
- TRIGGER_BEFORE_INSERT --- définition d'une valeur de colonne à partir des calculs
la source
=
et:=
?SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10
semble évaluer les affectations de variables avant que la commande ne soit effectuée, de sorte que la valeur renvoyée de @var ne puisse même pas être liée à l'une des lignes renvoyées. Cependant, les documents ne disent pas dans quelles conditions cela peut se produire.Utilisez set ou select
exemple :
la source
Différents types de variables:
DECLARE n'est autorisé qu'à l'intérieur d'une instruction composée BEGIN ... END et doit être à son début, 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 afin de l'exécuter en tant que sous-requête:
Ou bien, vous pouvez utiliser SELECT ... INTO:
la source
Pour toute personne utilisant @variable dans la fonction concat_ws pour obtenir 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.
la source
Déclarer:
SET @a = 1;
Usage:
INSERT INTO `t` (`c`) VALUES (@a);
la source
Valeur SET
la source