首頁 >資料庫 >mysql教程 >MySQL 中的使用者定義變數與流程變數:有什麼不同?

MySQL 中的使用者定義變數與流程變數:有什麼不同?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-21 14:01:10503瀏覽

User-Defined Variables vs. Procedure Variables in MySQL: What's the Difference?

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 (過程變數)
作用域 持續整個會話 每次過程呼叫時重新初始化
語法
特性 @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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn