Vergleich von benutzerdefinierten Variablen und Prozessvariablen in MySQL
In MySQL werden benutzerdefinierte Variablen mit einem @
-Präfix deklariert, während Prozedurvariablen kein Präfix haben. Diese Unterscheidung ergibt sich aus der Tatsache, dass sitzungsspezifische benutzerdefinierte Variablen ihren Wert während einer Sitzung behalten, während Prozedurvariablen bei jedem Prozeduraufruf erneut auf NULL initialisiert werden.
Sitzungsspezifische Variablen (@variable)
Benutzerdefinierte Variablen mit dem Präfix @
fungieren als sitzungsspezifische Variablen. Sie können mit einer SET-Anweisung oder in einer Abfrage initialisiert werden und bleiben bis zum Ende der Sitzung bestehen. Zum Beispiel:
<code class="language-sql">SET @var = 1;</code>
Prozessvariable (Variable)
In einer gespeicherten Prozedur oder Funktion ohne Präfix deklarierte Variablen sind lokale Variablen. Diese Variablen sind nur im Rahmen der Prozedur verfügbar und werden bei jedem Prozeduraufruf neu auf NULL initialisiert.
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; ... END;</code>
Hauptunterschiede
Die folgende Tabelle fasst die Hauptunterschiede zwischen @
Variablen und Prozessvariablen zusammen:
@variable
(sitzungsspezifisch)Variable
(Prozessvariable)特性 |
@variable (会话特定) |
variable (过程变量) |
---|---|---|
作用域 | 持续整个会话 | 每次过程调用时重新初始化 |
语法 | 以 @ 为前缀 |
没有前缀 |
Beispiel
Betrachten Sie die folgende gespeicherte Prozedur:
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; ... END;</code>
Jedes Mal, wenn diese Prozedur aufgerufen wird, wird var2
auf 1 zurückgesetzt und @var2
wird weiter erhöht. Dies zeigt das Reinitialisierungsverhalten von Prozessvariablen und die sitzungsspezifische Natur benutzerdefinierter Variablen.
Das obige ist der detaillierte Inhalt vonBenutzerdefinierte Variablen vs. Prozedurvariablen in MySQL: Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!