Heim >Datenbank >MySQL-Tutorial >MySQL-Variablen: Was ist der Unterschied zwischen „@Variablen' und Prozedurvariablen?
Benutzerdefinierte MySQL-Variablen: @Variablen vs. Prozedurvariablen
MySQL bietet benutzerdefinierte Variablen, die durch ein führendes @
-Symbol gekennzeichnet sind (z. B. @myVar
). Diese @variables
sind sitzungsbezogen; Sie werden innerhalb einer Sitzung initialisiert und bleiben bestehen, bis die Sitzung endet. Entscheidend ist, dass sie sich von Prozedurvariablen unterscheiden.
Im Gegensatz zu @variables
sind Prozedurvariablen lokal für eine gespeicherte Prozedur. Bei jedem Aufruf einer Prozedur werden ihre lokalen Variablen auf NULL
neu initialisiert. Dies steht in krassem Gegensatz zu @variables
, deren Werte über mehrere Prozeduraufrufe innerhalb derselben Sitzung hinweg beibehalten werden. Das Ändern eines @variable
innerhalb einer Prozedur wirkt sich auf seinen Wert für nachfolgende Aufrufe innerhalb dieser Sitzung aus.
Es ist auch wichtig, sowohl @variables
als auch Prozedurvariablen von den MySQL-Systemvariablen zu unterscheiden. Systemvariablen sind entweder global (z. B. @@global.port
) oder sitzungsbezogen (z. B. @@session.sql_mode
). Sitzungssystemvariablen sind zwar sitzungsspezifisch, verhalten sich aber anders als @variables
.
Lassen Sie uns den Unterschied veranschaulichen:
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE myProcVar INT DEFAULT 1; SET myProcVar = myProcVar + 1; SET @myUserVar = @myUserVar + 1; SELECT myProcVar, @myUserVar; END; SET @myUserVar = 1; CALL prc_test(); CALL prc_test(); CALL prc_test();</code>
Die Ausgabe zeigt:
<code>myProcVar @myUserVar --------- ---------- 2 2 2 3 2 4</code>
Beachten Sie, dass myProcVar
(die Prozedurvariable) bei jedem Aufruf auf 2 zurückgesetzt wird, während @myUserVar
(die benutzerdefinierte Variable) kumulativ inkrementiert und ihren Wert über alle Aufrufe hinweg beibehält.
Dieses Verständnis ist entscheidend für die effektive Nutzung von MySQL-Variablen. @variables
Sitzungsdaten verwalten, Prozedurvariablen verwalten den lokalen Prozedurstatus und Systemvariablen steuern die Datenbankumgebung.
Das obige ist der detaillierte Inhalt vonMySQL-Variablen: Was ist der Unterschied zwischen „@Variablen' und Prozedurvariablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!