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中文網其他相關文章!