Wie deklariere ich eine Variable in mysql, damit meine zweite Abfrage sie verwenden kann?
Ich möchte etwas schreiben wie:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Es gibt hauptsächlich drei Arten von Variablen in MySQL:
Benutzerdefinierte Variablen (mit @
vorangestellt):
Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder Zu initialisieren. Wenn Sie sich auf eine Variable beziehen, die nicht mit Initialisiert wurde, hat sie den Wert NULL
und einen Typ von Zeichenfolge.
SELECT @var_any_var_name
Sie können eine Variable mit der Anweisung SET
oder SELECT
initialisieren:
SET @start = 1, @finish = 10;
oder
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Benutzervariablen kann ein Wert aus einer begrenzten Menge von Daten zugewiesen werden. Typen: Ganzzahl, Dezimalzahl, Gleitkomma, binäre oder nicht-binäre Zeichenfolge, Wert oder NULL-Wert.
Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine von einem Client definierte Variable "" Kann von anderen Clients nicht gesehen oder verwendet werden.
Sie können in SELECT
-Abfragen mit Advanced MySQL-Benutzervariablentechniken verwendet werden.
Lokale Variablen (ohne Präfix):
Lokale Variablen müssen vor dem Zugriff auf DECLARE
deklariert werden.
Sie können als lokale Variablen und die Eingabeparameter Innerhalb einer gespeicherten Prozedur verwendet werden:
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);
Wenn die DEFAULT
-Klausel fehlt, lautet der Anfangswert NULL
.
Der Gültigkeitsbereich einer lokalen Variablen ist der BEGIN ... END
-Block in
Serversystemvariablen (mit @@
vorangestellt):
Der MySQL-Server verwaltet viele Systemvariablen , die auf einen Standardwert ... konfiguriert sind. Sie können vom Typ GLOBAL
, SESSION
oder BOTH
sein.
Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen ihren Betrieb für einzelne Clientverbindungen beeinflussen.
Um die aktuellen Werte anzuzeigen, die von einem laufenden Server verwendet werden, verwenden Sie die Anweisung SHOW VARIABLES
oder SELECT @@var_name
.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
Sie können beim Start des Servers 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 mit SET GLOBAL
oder SET SESSION
läuft:
-- 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;
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, ist nur der letzte Wert in col2 keep (override).
SELECT col1, col2 INTO @var_name, col3 FROM .....
in diesem Fall enthält das Ergebnis von select keine col2-Werte
Verwenden Sie set oder select
SET @counter := 100;
SELECT @variable_name := value;
beispiel:
SELECT @price := MAX(product.price)
FROM product
DECLARE var_name [ var_name] ... type [DEFAULT-Wert] Diese Anweisung deklariert lokale Variablen in gespeicherten Programmen.
Ex. DECLARE id INT vorzeichenlos DEFAULT 1;
Um einen Standardwert für eine Variable anzugeben, schließen Sie eine DEFAULT-Klausel ein. Der Wert kann als Ausdruck angegeben werden. es muss keine Konstante sein. Wenn die DEFAULT-Klausel fehlt, lautet der Anfangswert NULL.
Lokale Variablen werden wie gespeicherte Routinenparameter bezüglich Datentyp und Überlaufprüfung behandelt.
Variablendeklarationen müssen vor Cursor- oder Handlerdeklarationen erscheinen.
Lokale Variablennamen unterscheiden nicht zwischen Groß- und Kleinschreibung. Zulässige Zeichen und Zitierregeln entsprechen denen für andere Bezeichner
Der Gültigkeitsbereich einer lokalen Variablen ist der BEGIN ... END-Block, in dem sie deklariert wird. Auf die Variable kann in Blöcken innerhalb des deklarierenden Blocks Bezug genommen werden, mit Ausnahme der Blöcke, die eine Variable mit demselben Namen deklarieren.
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;
Verschiedene Arten von Variablen:
DECLARE ist nur innerhalb einer BEGIN ... END-Verbundanweisung zulässig und muss vor allen anderen Anweisungen am Anfang stehen.
Wenn Sie also ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" möchten, müssen Sie 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.
Außerdem müssen Sie Ihre Abfrage entweder in Klammern setzen, um sie als Unterabfrage auszuführen:
SET @countTotal = (SELECT COUNT (*) FROM nGrams);
Oder verwenden Sie SELECT ... INTO:
SELECT COUNT (*) INTO @countTotal FROM nGrams;
Vergessen Sie nicht, dass jede Person, die @variable in der concat_ws-Funktion verwendet, um verkettete Werte abzurufen, sie mit einem leeren Wert neu initialisiert. Andernfalls kann der alte Wert für dieselbe Sitzung verwendet werden.
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;