Wie deklariere ich eine Variable in Mysql, so dass meine zweite Abfrage sie verwenden kann?
Ich würde gerne etwas schreiben wie:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Wie deklariere ich eine Variable in Mysql, so dass meine zweite Abfrage sie verwenden kann?
Ich würde gerne etwas schreiben wie:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
In MySQL gibt es hauptsächlich drei Arten von Variablen:
Benutzerdefinierte Variablen (mit vorangestelltem @
) :
Sie können auf jede benutzerdefinierte Variable zugreifen, ohne sie zu deklarieren oder sie zu initialisieren. Wenn Sie auf eine Variable verweisen, die noch nicht initialisiert wurde, hat sie einen Wert von NULL
und einen String-Typ.
SELECT @var_any_var_name
Sie können eine Variable initialisieren mit SET
o SELECT
Erklärung:
SET @start = 1, @finish = 10;
o
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Benutzervariablen kann ein Wert aus einem begrenzten Satz von Daten zugewiesen werden Typen zugewiesen werden: Ganzzahl, Dezimalzahl, Fließkommazahl, binäre oder nichtbinäre Zeichenkette, oder NULL-Wert.
Benutzerdefinierte Variablen sind sitzungsspezifisch. Das heißt, eine benutzer Variable, die von einem Client definiert wurde, kann von anderen Clients nicht gesehen oder verwendet werden. Klienten.
Sie können verwendet werden in SELECT
Abfragen mit Fortgeschrittene Techniken für MySQL-Benutzervariablen .
Lokale Variablen (keine Vorsilbe) :
Lokale Variablen müssen deklariert werden mit DECLARE
vor darauf zugreifen.
Sie können als lokale Variablen und als Eingabeparameter verwendet werden innerhalb einer gespeicherten Prozedur:
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);
の場合は DEFAULT
Klausel fehlt, ist der Anfangswert NULL
.
Der Geltungsbereich einer lokalen Variablen ist der BEGIN ... END
Block innerhalb in dem er deklariert wird.
Server-Systemvariablen (mit vorangestelltem @@
) :
Der MySQL-Server verwaltet viele Systemvariablen auf einen Standardwert konfiguriert. Sie können vom Typ GLOBAL
, SESSION
o BOTH
.
Globale Variablen wirken sich auf den Gesamtbetrieb des Servers aus, während Sitzungsvariablen seinen Betrieb für einzelne Client-Verbindungen beeinflussen.
Um die aktuellen Werte zu sehen, die von einem laufenden Server verwendet werden, verwenden Sie die SHOW VARIABLES
Erklärung oder SELECT @@var_name
.
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
Sie können beim Start des Servers über Optionen in der Befehlszeile oder in einer Optionsdatei festgelegt werden. Die meisten von ihnen können dynamisch geändert werden, während der Server läuft, indem man SET GLOBAL
o 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;
SETZEN
SET @var_name = value; /* or */ SET @var_name := value;
beide Betreiber \= y := werden akzeptiert
SELECT
SELECT col1, @var_name := col2 from tb_name WHERE "condition";
wenn mehrere Datensätze gefunden werden, nur der letzte Wert in col2
beibehalten wird (Override);
SELECT col1, col2 INTO @var_name, col3 FROM ...
in diesem Fall das Ergebnis von Select
nicht enthalten ist col2
Werte
Ex beide Methoden verwendet
-- TRIGGER_BEFORE_INSERT --- Setzen eines Spaltenwertes aus Berechnungen
...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col = IFNULL( @NR, 0 ) + 1;
...
Verschiedene Arten von Variablen:
DECLARE ist nur innerhalb eines BEGIN ... END-Verbundanweisung zulässig und muss an deren Anfang stehen, vor allen anderen Anweisungen.
Wenn Sie also ein gespeichertes Programm definieren und tatsächlich eine "lokale Variable" wollen, müssen Sie das @-Zeichen weglassen und sicherstellen, dass Ihre DECLARE-Anweisung am Anfang Ihres Programmblocks steht. Andernfalls, wenn Sie eine "Benutzervariable" verwenden wollen, lassen Sie die DECLARE-Anweisung weg.
Außerdem müssen Sie Ihre Abfrage entweder in Klammern setzen, um sie als Unterabfrage auszuführen:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Oder Sie könnten SELECT ... INTO verwenden:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.