問題描述
在我發布的另一個問題中,有人告訴我兩者之間存在差異:
@variable
和:
變量
在 MySQL 中.他還提到了 MSSQL 如何具有批處理范圍而 MySQL 具有會話范圍.有人可以為我詳細說明一下嗎?
MySQL 有一個概念 用戶定義的變量.
它們是松散類型的變量,可以在會話中的某處初始化并保持它們的值直到會話結束.
它們以 @
符號開頭,如下所示:@var
您可以使用 SET
語句或在查詢中初始化此變量:
SET @var = 1選擇@var2 := 2
在MySQL中開發存儲過程時,可以傳遞輸入參數并聲明局部變量:
DELIMITER//創建程序 prc_test (var INT)開始聲明 var2 INT;設置 var2 = 1;選擇 var2;結尾;//分隔符;
這些變量前面沒有任何前綴.
過程變量和特定于會話的用戶定義變量之間的區別在于,每次調用過程時,過程變量都會重新初始化為NULL
,而特定于會話的變量則不是:
CREATE PROCEDURE prc_test()開始聲明 var2 INT DEFAULT 1;SET var2 = var2 + 1;設置@var2 = @var2 + 1;選擇 var2,@var2;結尾;設置@var2 = 1;調用 prc_test();var2 @var2--- ---2 2調用 prc_test();var2 @var2--- ---2 3調用 prc_test();var2 @var2--- ---2 4
如您所見,每次調用過程時都會重新初始化var2
(過程變量),而@var2
(會話特定變量)則不會.>
(除了用戶自定義的變量,MySQL還有一些預定義的系統變量",可能是全局變量",比如@@global.portcode> 或會話變量",例如
@@session.sql_mode
;這些會話變量"與會話特定的用戶定義變量無關.)
In another question I posted someone told me that there is a difference between:
@variable
and:
variable
in MySQL. He also mentioned how MSSQL has batch scope and MySQL has session scope. Can someone elaborate on this for me?
MySQL has a concept of user-defined variables.
They are loosely typed variables that may be initialized somewhere in a session and keep their value until the session ends.
They are prepended with an @
sign, like this: @var
You can initialize this variable with a SET
statement or inside a query:
SET @var = 1
SELECT @var2 := 2
When you develop a stored procedure in MySQL, you can pass the input parameters and declare the local variables:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
These variables are not prepended with any prefixes.
The difference between a procedure variable and a session-specific user-defined variable is that a procedure variable is reinitialized to NULL
each time the procedure is called, while the session-specific variable is not:
CREATE PROCEDURE prc_test ()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 = var2 + 1;
SET @var2 = @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
As you can see, var2
(procedure variable) is reinitialized each time the procedure is called, while @var2
(session-specific variable) is not.
(In addition to user-defined variables, MySQL also has some predefined "system variables", which may be "global variables" such as @@global.port
or "session variables" such as @@session.sql_mode
; these "session variables" are unrelated to session-specific user-defined variables.)
這篇關于MySQL:@variable 與變量.有什么不同?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!