Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder zu initialisieren. Wenn Sie auf eine Variable verweisen, die nicht initialisiert wurde, hat sie den Wert NULLund den Typ einer Zeichenfolge.
SELECT@var_any_var_name
Sie können eine Variable mit SEToder SELECTAnweisung initialisieren :
SET@start=1,@finish =10;
oder
SELECT@start:=1,@finish :=10;SELECT*FROM places WHERE place BETWEEN@startAND@finish;
Benutzervariablen kann ein Wert aus einer begrenzten Anzahl von Datentypen zugewiesen werden: Ganzzahl, Dezimalzahl, Gleitkomma, binäre oder nicht-binäre Zeichenfolge oder NULL-Wert.
Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine von einem Client definierte Benutzervariable kann von anderen Clients nicht gesehen oder verwendet werden.
Der MySQL-Server verwaltet viele Systemvariablen, die auf einen Standardwert konfiguriert sind. Sie können vom Typ sein GLOBAL, SESSIONoder BOTH.
Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen den Betrieb für einzelne Clientverbindungen beeinflussen.
Verwenden Sie die SHOW VARIABLESAnweisung oder , um die aktuellen Werte anzuzeigen, die von einem laufenden Server verwendet werden SELECT @@var_name.
SHOW VARIABLES LIKE'%wait_timeout%';SELECT@@sort_buffer_size;
Sie können beim Serverstart mithilfe von Optionen in der Befehlszeile oder in einer Optionsdatei festgelegt werden. Die meisten von ihnen können dynamisch geändert werden, während der Server ausgeführt wird mit SET GLOBALoder 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;
Irgendwie hat der =Operator bei mir nicht funktioniert. Es hat gut funktioniert, als ich :=Operator verwendet habe.
Divinedragon
24
=Operator arbeitet nur in SETKlausel. Um einer Variablen in der SELECTAbfrage einen Wert :=SELECT @start := 1
zuzuweisen,
2
Können Sie bitte klarstellen, was dies bedeutet: "Benutzerdefinierte Sitzungsvariablen, die mit dem Präfix @ gekennzeichnet sind, müssen nicht deklariert werden"?
Billynoah
3
@billynoah Ich gehe davon aus, dass benutzerdefinierte Sitzungsvariablen (die mit @ beginnen) keine explizite Deklaration benötigen. Sie können sie einfach sofort zuweisen, als ob sie bereits deklariert worden wären.
Jobo3208
2
Und Sie können eine Variable mit dem Ergebnis einer select-Anweisung wie folgt zuweisen: SET @subscriptionId = (Wählen Sie die SubscriptionId unter User aus, wobei emailAddress='[email protected] ');
Software Prophets
28
EINSTELLEN
SET@var_name = value
ODER
SET@var := value
beide Operatoren = und : = werden akzeptiert
WÄHLEN
SELECT col1,@var_name := col2 from tb_name WHERE"conditon";
Wenn mehrere Datensätze gefunden wurden, wird nur der letzte Wert in Spalte 2 beibehalten (überschreiben).
SELECT col1, col2 INTO@var_name, col3 FROM.....
In diesem Fall enthält das Ergebnis von select keine col2-Werte
Ex beide Methoden verwendet
- TRIGGER_BEFORE_INSERT --- Festlegen eines Spaltenwerts aus Berechnungen
...SELECT count(*)INTO@NR FROM a_table WHERE a_condition;SET NEW.ord_col = IFNULL(@NR,0)+1;...
Ich denke, dass für mysql die SELECT-Syntax notwendig ist, um die Bedeutung von = (Vergleich) von zu trennen: = (asign)
bortunac
1
In bestimmten Fällen entsprechen die in Variablen verbleibenden Werte möglicherweise NICHT der zuletzt zurückgegebenen Zeile. Es SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10scheint beispielsweise, als würden die Variablenzuweisungen vor Abschluss der Bestellung ausgewertet, sodass sich der zurückgegebene Wert von @var möglicherweise nicht einmal auf eine der zurückgegebenen Zeilen bezieht. Die Dokumente sagen jedoch nicht, unter welchen Bedingungen dies passieren kann.
Lokale Variablen (denen kein @ vorangestellt ist) sind stark typisiert und auf den gespeicherten Programmblock beschränkt, in dem sie deklariert sind. Beachten Sie, dass, wie unter DECLARE-Syntax dokumentiert :
DECLARE ist nur innerhalb einer zusammengesetzten Anweisung BEGIN ... END zulässig und muss vor allen anderen Anweisungen am Anfang stehen.
Benutzervariablen (denen @ vorangestellt ist) werden lose eingegeben und auf die Sitzung beschränkt. Beachten Sie, dass sie weder benötigt noch deklariert werden können - verwenden Sie sie einfach direkt.
Wenn Sie ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" möchten, müssen Sie daher das @ -Zeichen löschen und sicherstellen, dass sich Ihre DECLARE-Anweisung am Anfang Ihres Programmblocks befindet. Andernfalls löschen Sie die DECLARE-Anweisung, um eine "Benutzervariable" zu verwenden.
Darüber hinaus müssen Sie Ihre Abfrage entweder in Klammern setzen, um sie als Unterabfrage auszuführen:
Vergessen Sie nicht, Personen, die @variable in der Funktion concat_ws verwenden, um verkettete Werte abzurufen, mit einem leeren Wert neu zu initialisieren. Andernfalls kann der alte Wert für dieselbe Sitzung verwendet werden.
Antworten:
In MySQL gibt es hauptsächlich drei Arten von Variablen:
Benutzerdefinierte Variablen (mit dem Präfix
@
):Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder zu initialisieren. Wenn Sie auf eine Variable verweisen, die nicht initialisiert wurde, hat sie den Wert
NULL
und den Typ einer Zeichenfolge.Sie können eine Variable mit
SET
oderSELECT
Anweisung initialisieren :oder
Benutzervariablen kann ein Wert aus einer begrenzten Anzahl von Datentypen zugewiesen werden: Ganzzahl, Dezimalzahl, Gleitkomma, binäre oder nicht-binäre Zeichenfolge oder NULL-Wert.
Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine von einem Client definierte Benutzervariable kann von anderen Clients nicht gesehen oder verwendet werden.
Sie können in
SELECT
Abfragen mit Advanced MySQL-Benutzervariablentechniken verwendet werden .Lokale Variablen (kein Präfix):
Lokale Variablen müssen mit deklariert werden,
DECLARE
bevor auf sie zugegriffen werden kann.Sie können als lokale Variablen und Eingabeparameter innerhalb einer gespeicherten Prozedur verwendet werden:
Wenn die
DEFAULT
Klausel fehlt, ist der AnfangswertNULL
.Der Bereich einer lokalen Variablen ist der
BEGIN ... END
Block, in dem sie deklariert ist.Serversystemvariablen (mit dem Präfix
@@
):Der MySQL-Server verwaltet viele Systemvariablen, die auf einen Standardwert konfiguriert sind. Sie können vom Typ sein
GLOBAL
,SESSION
oderBOTH
.Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen den Betrieb für einzelne Clientverbindungen beeinflussen.
Verwenden Sie die
SHOW VARIABLES
Anweisung oder , um die aktuellen Werte anzuzeigen, die von einem laufenden Server verwendet werdenSELECT @@var_name
.Sie können beim Serverstart mithilfe von Optionen in der Befehlszeile oder in einer Optionsdatei festgelegt werden. Die meisten von ihnen können dynamisch geändert werden, während der Server ausgeführt wird mit
SET GLOBAL
oderSET SESSION
:quelle
=
Operator bei mir nicht funktioniert. Es hat gut funktioniert, als ich:=
Operator verwendet habe.=
Operator arbeitet nur inSET
Klausel. Um einer Variablen in derSELECT
Abfrage einen Wert:=
SELECT @start := 1
ODER
beide Operatoren = und : = werden akzeptiert
Wenn mehrere Datensätze gefunden wurden, wird nur der letzte Wert in Spalte 2 beibehalten (überschreiben).
In diesem Fall enthält das Ergebnis von select keine col2-Werte
Ex beide Methoden verwendet
- TRIGGER_BEFORE_INSERT --- Festlegen eines Spaltenwerts aus Berechnungen
quelle
=
und:=
?SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10
scheint beispielsweise, als würden die Variablenzuweisungen vor Abschluss der Bestellung ausgewertet, sodass sich der zurückgegebene Wert von @var möglicherweise nicht einmal auf eine der zurückgegebenen Zeilen bezieht. Die Dokumente sagen jedoch nicht, unter welchen Bedingungen dies passieren kann.Verwenden Sie set oder select
Beispiel:
quelle
Verschiedene Arten von Variablen:
DECLARE ist nur innerhalb einer zusammengesetzten Anweisung BEGIN ... END zulässig und muss vor allen anderen Anweisungen am Anfang stehen.
Wenn Sie ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" möchten, müssen Sie daher das @ -Zeichen löschen und sicherstellen, dass sich Ihre DECLARE-Anweisung am Anfang Ihres Programmblocks befindet. Andernfalls löschen Sie die DECLARE-Anweisung, um eine "Benutzervariable" zu verwenden.
Darüber hinaus müssen Sie Ihre Abfrage entweder in Klammern setzen, um sie als Unterabfrage auszuführen:
Oder Sie könnten SELECT verwenden ... INTO:
quelle
Vergessen Sie nicht, Personen, die @variable in der Funktion concat_ws verwenden, um verkettete Werte abzurufen, mit einem leeren Wert neu zu initialisieren. Andernfalls kann der alte Wert für dieselbe Sitzung verwendet werden.
quelle
Erklären:
SET @a = 1;
Verwendungszweck:
INSERT INTO `t` (`c`) VALUES (@a);
quelle
SET Wert
quelle