Wie man Variablen in MySQL deklariert und benutzt

Gustavo du Mortier 27 November 2020
  1. Benutzerdefinierte Variablen in MySQL
  2. Benutzer-definierte Variablen initialisieren
  3. Verwendung von Variablen als Felder in einer SELECT-Anweisung
  4. Lokale Variablen in MySQL deklarieren
  5. Systemvariablen in MySQL deklarieren
Wie man Variablen in MySQL deklariert und benutzt

In diesem Tutorial-Artikel erklären wir, wie man Variablen innerhalb des SQL-Codes für MySQL-Datenbanken deklariert.

In SQL-Skripten können Sie Variablen verwenden, um während der Ausführung einer Befehlssequenz Werte zu speichern und diese anstelle von Literalen zu verwenden.

Benutzerdefinierte Variablen in MySQL

MySQL erkennt verschiedene Typen von Variablen. Der erste Typ sind die benutzerdefinierten Variablen, die durch ein als Präfix verwendetes @-Symbol gekennzeichnet sind. In MySQL können Sie auf benutzerdefinierte Variablen zugreifen, ohne sie vorher zu deklarieren oder zu initialisieren. Wenn Sie dies tun, wird der Variable bei der Initialisierung ein NULL-Wert zugewiesen. Zum Beispiel, wenn Sie SELECT mit einer Variable benutzen, ohne ihr einen Wert zuzuweisen, wie in diesem Fall:

SELECT @SomeVariable;

MySQL gibt einen NULL-Wert zurück.

Benutzer-definierte Variablen initialisieren

Um eine benutzerdefinierte Variable zu initialisieren, müssen Sie eine SET- oder SELECT-Anweisung verwenden. Sie können viele Variablen auf einmal initialisieren, indem Sie jede Zuweisungsanweisung durch ein Komma trennen, so wie hier:

SET @FirstVar=1, @SecondVar=2;

Sobald Sie einer Variablen einen Wert zuweisen, wird sie einen Typ entsprechend dem gegebenen Wert haben. In den vorhergehenden Beispielen sind @FirstVar und @SecondVar vom Typ int.

Die Lebensdauer einer benutzerdefinierten Variablen dauert so lange, wie die Sitzung aktiv ist, und sie ist für andere Sitzungen unsichtbar. Sobald die Sitzung geschlossen wird, verschwindet die Variable.

Es gibt 5 Datentypen, die Sie einer benutzerdefinierten Variablen zuweisen können:

  • Zeichenkette (binär oder nicht-binär)
  • Ganzzahl
  • Dezimal
  • Gleitkomma
  • NULL, die mit jedem Typ assoziiert werden kann.

Um einer Variablen einen Wert zuzuweisen, können Sie entweder das Symbol = oder := verwenden. Die beiden folgenden Anweisungen haben die gleiche Wirkung:

SET @MyIntVar = 1;
SET @MyIntVar := 1;

Verwendung von Variablen als Felder in einer SELECT-Anweisung

Variablen können Teil der Feldlisten einer SELECT-Anweisung sein. Sie können Variablen und Feldnamen mischen, wenn Sie, wie in diesem Beispiel, Felder in einer Select-Anweisung angeben:

SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;

Lokale Variablen in MySQL deklarieren

Lokale Variablen benötigen das @-Präfix in ihrem Namen nicht, aber sie müssen deklariert werden, bevor sie verwendet werden können. Um eine lokale Variable zu deklarieren, können Sie die DECLARE-Anweisung benutzen oder sie als Parameter innerhalb einer STORED PROCEDURE-Deklaration verwenden.

Wenn Sie eine lokale Variable deklarieren, kann ihr optional ein Vorgabewert zugewiesen werden. Wenn Sie keinen Vorgabewert zuweisen, wird die Variable mit einem NULL-Wert initialisiert.

Jede Variable lebt innerhalb eines Bereichs, der durch den BEGIN ... END-Block, der ihre Deklaration enthält, abgegrenzt wird.

Das folgende Beispiel veranschaulicht zwei verschiedene Arten, lokale Variablen zu verwenden: als Prozedurparameter und als prozedurinterne Variable:

DELIMITER $$

CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
	DECLARE factor DECIMAL(5, 2);
	SET factor:=3.45;
	SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$

DELIMITER ;

Im vorherigen Beispiel wird die Variable itemcount als Parameter verwendet, um einen Wert an die Prozedur zu übergeben. Diese Variable wird später in der SELECT-Anweisung verwendet, um das aus der Tabelle erhaltene ListPrice-Feld zu multiplizieren. Die lokale Variable factor wird verwendet, um einen Dezimalwert zu speichern, der zur Multiplikation des resultierenden Preises verwendet wird.

Systemvariablen in MySQL deklarieren

Es gibt einen dritten Typ von Variablen, Systemvariablen genannt, die dazu verwendet werden, Werte zu speichern, die einzelne Client-Verbindungen (SESSION-Variablen) oder den gesamten Server-Betrieb (GLOBAL-Variablen) betreffen.

Systemvariablen werden normalerweise beim Start des Servers gesetzt. Dazu können Sie die Befehlszeile verwenden oder die SET-Anweisung in eine Optionsdatei aufnehmen. Ihre Werte können jedoch innerhalb eines SQL-Skripts geändert werden.

Systemvariablen können durch ein doppeltes @-Zeichen als Präfix oder durch die Worte GLOBAL oder SESSION in der SET-Anweisung identifiziert werden. Eine andere Möglichkeit, GLOBAL und SESSION Systemvariablen zu unterscheiden, ist die Verwendung eines zweiten Präfixes: global oder session. Hier sind einige Beispiele dafür, wie Sie Systemvariablen Werte zuweisen können:

-- Alternative ways to set session system variables:
SET interactive_timeout=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;

-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;

Um die Systemvariablen zu sehen, die innerhalb einer Sitzung oder im Server verwendet werden, können Sie die Anweisung SHOW VARIABLES verwenden. Sie können einen Vergleichsoperator hinzufügen, um diese Liste zu filtern, wenn Sie den Wert einiger bestimmter Variablen erhalten möchten. Zum Beispiel:

SHOW VARIABLES LIKE '%timeout%'