1. 程式人生 > >MySQL儲存過程中declare和set定義變數的區別

MySQL儲存過程中declare和set定義變數的區別

  在儲存過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是區域性變數,@set定義的類似全域性變數。

  1、declare定義的變數類似java類中的區域性變數,僅在類中生效。即只在儲存過程中的begin和end之間生效。

  2、@set定義的變數,叫做會話變數,也叫使用者定義變數,在整個會話中都起作用(比如某個應用的一個連線過程中),即這個變數可以在被呼叫的儲存過程或者程式碼之間共享資料。如何理解呢?可以看下面這個簡單例子,很好理解。

(1)先執行下面指令碼,建立一個儲存過程,分別有declare形式的變數和@set形式的變數

複製程式碼
DROP PROCEDURE
IF EXISTS temp; DELIMITER // CREATE PROCEDURE temp() BEGIN DECLARE a INT DEFAULT 1; SET a=a+1; SET @b=@b+1; SELECT a,@b; END // DELIMITER ;
複製程式碼

(2)接著為b變數初始化。

SET @b=1; 

(3)然後重複呼叫這個儲存過程。

CALL temp();

(4)會發現a的值不改變,而b的值會一直增加。

  所以,總結起來就是開頭那句話,declare定義的類似是區域性變數,@set定義的類似全域性變數。