首頁 > 資料庫 > mysql教程 > MySQL 變數:`@variables` 和過程變數之間有什麼區別?

MySQL 變數:`@variables` 和過程變數之間有什麼區別?

Patricia Arquette
發布: 2025-01-21 13:46:09
原創
559 人瀏覽過

MySQL Variables: What's the Difference Between `@variables` and Procedure Variables?

MySQL 使用者定義變數:@variables 與流程變數

MySQL 提供使用者定義的變量,由前導 @ 符號(例如 @myVar)表示。 這些 @variables 是會話範圍的;它們在會話中初始化並持續到會話結束。 至關重要的是,它們與過程變數不同。

@variables不同,製程變數是預存程序的本地變數。 每次呼叫過程時,其局部變數都會重新初始化為NULL。這與 @variables 形成鮮明對比,後者在同一會話內的多個過程呼叫中保留其值。 修改過程內的 @variable 會影響該會話中後續呼叫的值。

區分 @variables 和製程變數與 MySQL 的系統變數也很重要。系統變數可以是全域變數(例如 @@global.port),也可以是會話範圍的變數(例如 @@session.sql_mode)。 會話系統變數雖然特定於會話,但其行為與 @variables.

不同

讓我們來說明一下差異:

<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>
登入後複製

輸出將顯示:

<code>myProcVar  @myUserVar
---------  ----------
2           2
2           3
2           4</code>
登入後複製

觀察到 myProcVar(過程變數)在每次呼叫時重設為 2,而 @myUserVar(使用者定義變數)累積遞增,在呼叫過程中保留其值。

這種理解對於有效使用 MySQL 變數至關重要。 @variables 管理會話數據,過程變數處理本地過程狀態,系統變數控制資料庫環境。

以上是MySQL 變數:`@variables` 和過程變數之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板