MySQL 中使用者定義變數與製程變數的比較
MySQL 中,使用者定義變數以 @
為前綴聲明,而流程變數則沒有前綴。這種差異源自於會話特定的使用者定義變數在整個會話中保持其值,而過程變數在每次過程呼叫時都會重新初始化為 NULL。
會話特定變數 (@variable)
帶有 @
前綴的使用者定義變數充當會話特定變數。它們可以使用 SET 語句或在查詢中初始化,並持續到會話結束。例如:
<code class="language-sql">SET @var = 1;</code>
製程變數 (variable)
在預存程序或函數中宣告的變量,沒有前綴,是局部變數。這些變數僅在過程的範圍內可用,並且在每次過程呼叫時都會重新初始化為 NULL。
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; ... END;</code>
主要區別
下表總結了 @
變數和製程變數之間的主要差異:
特性 |
@variable (會話特定) |
variable (過程變數) |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
作用域 | 持續整個會話 | 每次過程呼叫時重新初始化 | |||||||||
語法 | 以
|
沒有前綴 |
範例
考慮以下預存程序:
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; ... END;</code>
每次呼叫該過程時,var2
重設為 1,而 @var2
則持續遞增。這演示了過程變數的重新初始化行為以及使用者定義變數的會話特定特性。
以上是MySQL 中的使用者定義變數與流程變數:有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!